DataSnap“纯老式Delphi对象”和嵌套对象

5
一篇关于Delphi XE中DataSnap的新文章解释了DataSnap现在能够在服务器和客户端之间传输TObject子类,类似于Java企业版POJO(“普通的Java对象”)的概念。
如果这样的PODO具有需要初始化的嵌套对象类型属性,例如TStrings属性,那么这个新功能是否适用?所有这些子对象是否都将被序列化并传输其当前值?对于系统资源属性,例如TFileStream、THandle或TThread,在序列化对象中没有意义,这些属性可以标记为“不可序列化”吗?
一些信息可以在DocWiki中找到,其中包括以下内容:
这些是已经内置了转换/还原的字段:整数、字符串、字符、枚举、浮点、对象、记录。对于以下类型,字段值将被忽略,并期望用户进行转换:集合、方法、变体、接口、指针、动态数组、classRef、数组。

需要David的时候他在哪里... <vbg> - Lieven Keersmaekers
1
@Lieven 他正在专注于他比绝对一无所知更多的主题! - David Heffernan
2
这确实凸显了StackOverflow系统存在的问题。当所有Delphi问题都被David和Andreas抢走时,其他人就不会养成来这里回答问题的习惯。正是因为这个原因,我每隔一两天才会来这里看看,因为我没有必要。然而,如果有一个超出David和Andreas专业领域的问题,由于缺乏定期回答Delphi问题的人,它往往得不到解答。 - LachlanG
1个回答

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接