【发布时间】:2013-06-20 18:43:12
【问题描述】:
我正在尝试使用 TJSONMarshal (XE4) 序列化对象,但是当对象具有像 _recordset 这样的接口属性时我遇到了问题
例如
我的班级:
TFoo = class
private
FrsFoo: _recordset;
FFooProp: integer;
published
property rsFoo: _recordset read FrsFoo write FrsFoo;
property FooProp: integer read FFooProp write FFooProp;
end;
我的功能:
function TestSerialize: string;
var
JsonMarshal: TJSONMarshal;
Foo: TFoo;
begin
JsonMarshal := TJSONMarshal.Create(TJSONConverter.Create);
Foo := TFoo.Create;
Result := JsonMarshal.Marshal(Foo).ToString;
end;
结果:
{"type":"uTest.TFoo","id":1,"fields":{"FFooProp":0}}
rsFoo 没有序列化!
我可以序列化它吗?还是 TJSONMarshal 的限制?
【问题讨论】:
-
接口不能轻易序列化,因为它们没有实现,它们只是接口。您希望序列化如何工作?您可能需要实现以支持另一个提供序列化服务的接口。
-
是的,你是对的!但我有一个使用 rtti 将对象序列化为 XML 的实现,当“_recordset”出现时,我将其保存到流(TStringStream)中,这就是我如何将其“序列化”的方式。我认为也许我可以用 TJSONMarshal 做类似的事情,但“TJSONMarshal.RegisterConverter”只接受 TClass
标签: json delphi serialization recordset delphi-xe4