DataSnap "Простые старые объекты Delphi" и вложенные объекты - PullRequest
5 голосов
/ 29 марта 2011

Новая статья о DataSnap в Delphi XE объясняет, что DataSnap теперь может передавать потомки TObject между сервером и клиентом, аналогично концепции Java Enterprise Edition POJO («Простые старые объекты Java») .

Работает ли эта новая функция, если такой PODO имеет вложенные свойства типа объекта, которые необходимо инициализировать, например, свойство TStrings? Будут ли все эти подобъекты сериализованы и перенесены с их текущими значениями? А как насчет свойств системных ресурсов, таких как TFileStream, THandle или TThread, которые не имеют смысла в сериализованном объекте, могут ли они быть помечены как «не сериализуемые»?


Некоторая информация есть в DocWiki , включая эту:

Это поля, для которых есть уже встроенный преобразование / реверсия: целое число, строка, char, перечисление, float, объект, запись. Для следующих типов значения полей игнорируются и пользователь ожидается преобразование: набор, метод, вариант, интерфейс, указатель, dynArray, classRef, массив.

1 Ответ

4 голосов
/ 30 марта 2011

Я сам не пробовал, но, прочитав документацию , похоже, что она будет сериализована практически во всём, хотя вам может понадобиться написать собственный конвертер. Следующий код, который содержит подобъекты, приведен в качестве примера объекта, требующего пользовательского преобразователя.

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;
...