一个新的article关于 Delphi XE 中的 DataSnap 解释说,DataSnap 现在能够在服务器和客户端之间传输 TObject 后代,类似于 POJO 的 Java 企业版概念(“普通旧 Java 对象”)。
如果这样的 PODO 具有需要初始化的嵌套对象类型属性(例如 TStrings 属性),此新功能是否有效?所有这些子对象都会被序列化并以其当前值传输吗?系统资源属性(例如 TFileStream、THandle 或 TThread)在序列化对象中没有任何意义,可以将它们标记为“不可序列化”吗?
<小时/>一些信息位于 DocWiki ,包括这个:
These are the fields for which there is already a built-in conversion/reversion: integer, string, char, enumeration, float, object, record. For the following types, the field values are ignored and user conversion is expected: set, method, variant, interface, pointer, dynArray, classRef, array.
最佳答案
我自己没有尝试过,但阅读了 documentation尽管您可能需要编写一个自定义转换器,但它似乎会序列化几乎所有内容。以下包含子对象的代码作为需要自定义转换器的对象示例。
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;
关于delphi - DataSnap "Plain Old Delphi Objects"和嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476414/