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;
Другие вопросы по тегам