我想编写一个(我认为很简单的)Delphi中一个对象的往返序列化。但是,我似乎无法弄清楚如何在JSON中进行操作。我可以,并且已经有一段时间了,用XML做。
但是,我在标准Embarcadero文档中找到的示例和解释,例如当地的帮助,DocWiki等对我帮助不大。
最好,我正在寻找一个实际的工作示例使用XE(6)本机库或组件 - 但 < / strong>,我将非常感谢任何人过去习惯的任何文章(文档,文章,帖子等)和/或 任何其他图书馆 的链接这工作。
答案 0 :(得分:0)
我会避免使用本机框架,主要原因是它序列化对象的私有成员,我认为这打破了OOP封装原则。将序列化已发布的类属性更为正确。它打破了与其他语言的互操作性。
无论如何,这是一个基本的例子。
implementation
uses
Serializable,
REST.JsonReflect,
System.Json,
System.SysUtils;
{ TMain }
procedure TMain.Run;
var
mySerializable: TMySerializable;
marshaller: TJSONMarshal;
unMarshaller: TJSONUnMarshal;
jsonValue: TJSONValue;
begin
mySerializable := TMySerializable.Create;
mySerializable.MyInt := 42;
mySerializable.MyString := 'The Answer';
// Serialize
marshaller := TJSONMarshal.Create;
jsonValue := marshaller.Marshal(mySerializable);
marshaller.Free;
mySerializable.Free;
mySerializable := nil;
WriteLn('JSon value:');
WriteLn(jsonValue.ToString);
// Deserialize
unMarshaller := TJSONUnMarshal.Create;
mySerializable := TMySerializable(unMarshaller.CreateObject(TMySerializable, TJSONObject(jsonValue)));
WriteLn('mySerializable.MyInt: ' + IntToStr(mySerializable.MyInt));
WriteLn('mySerializable.MyString: ' + mySerializable.MyString);
jsonValue.Free;
mySerializable.Free;
unMarshaller.Free;
ReadLn;
end;
单元Serializable定义了一个简单的测试类。
unit Serializable;
interface
uses
System.Classes;
type
TMySerializable = class(TPersistent)
private
FMyString: string;
FMyInt: Integer;
published
property MyInt: Integer read FMyInt write FMyInt;
property MyString: string read FMyString write FMyString;
end;
implementation
end.