DataSnap"Plain Old Delphi Objects"和嵌套对象

mjn*_*mjn 5 delphi serialization datasnap delphi-xe podo

Delphi XE中有关DataSnap 的新文章解释说,DataSnap现在能够在服务器和客户端之间传输TObject后代,类似于POJO的Java企业版概念("普通旧Java对象").

如果这样的PODO具有需要初始化的嵌套对象类型属性(例如TStrings属性),这个新功能是否有用?所有这些子对象是否会被序列化并以其当前值传输?那些系统资源属性,如TFileStream,THandle或TThread,在序列化对象中没有意义,它们可以标记为"不可序列化"吗?


一些信息在DocWiki中,包括:

这些是已经内置转换/返回的字段:整数,字符串,字符,枚举,浮点数,对象,记录.对于以下类型,将忽略字段值并期望用户转换:set,method,variant,interface,pointer,dynArray,classRef,array.

Lac*_*anG 4

我自己还没有尝试过,但阅读文档后发现它会序列化几乎所有内容,尽管您可能需要编写自定义转换器。以下包含子对象的代码作为需要自定义转换器的对象的示例给出。

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;
Run Code Online (Sandbox Code Playgroud)