DataSnap "Простые старые объекты Delphi" и вложенные объекты
В новой статье о DataSnap в Delphi XE объясняется, что DataSnap теперь может передавать потомки TObject между сервером и клиентом, аналогично концепции Java Enterprise Edition в POJO ("Простые старые объекты Java").
Работает ли эта новая функция, если такой PODO имеет вложенные свойства типа объекта, которые необходимо инициализировать, например, свойство TStrings? Будут ли все эти подобъекты сериализованы и перенесены с их текущими значениями? А как насчет свойств системных ресурсов, таких как TFileStream, THandle или TThread, которые не имеют смысла в сериализованном объекте, их можно пометить как "не сериализуемые"?
Некоторая информация есть в DocWiki, включая эту:
Это поля, для которых уже есть встроенное преобразование / реверсия: целое число, строка, символ, перечисление, число с плавающей точкой, объект, запись. Для следующих типов значения полей игнорируются и ожидается преобразование пользователя: набор, метод, вариант, интерфейс, указатель, dynArray, classRef, array.
1 ответ
Я не пробовал себя, но, читая документацию, оказалось, что она будет сериализовать что угодно, хотя вам может понадобиться написать собственный конвертер. Следующий код, который содержит подобъекты, приведен в качестве примера объекта, требующего специального преобразователя.
type
TAddress = record
FStreet: String;
FCity: String;
FCode: String;
FCountry: String;
FDescription: TStringList;
end;
TPerson = class
private
FName: string;
FHeight: integer;
FAddress: TAddress;
FSex: char;
FRetired: boolean;
FChildren: array of TPerson;
FNumbers: set of 1..10;
public
constructor Create;
destructor Destroy; override;
procedure AddChild(kid: TPerson);
end;