有没有人在Delphi XE6中有一个JSON往返序列化的例子?

时间:2014-08-16 16:58:36

标签: json delphi serialization nativelibrary

我想编写一个(我认为很简单的)Delphi中一个对象的往返序列化。但是,我似乎无法弄清楚如何在JSON中进行操作。我可以,并且已经有一段时间了,用XML做。

但是,我在标准Embarcadero文档中找到的示例和解释,例如当地的帮助,DocWiki等对我帮助不大。

最好,我正在寻找一个实际的工作示例使用XE(6)本机库或组件 - < / strong>,我将非常感谢任何人过去习惯的任何文章(文档,文章,帖子等)和/或 任何其他图书馆 的链接这工作。

1 个答案:

答案 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.