有没有人有 Delphi XE6 中 JSON 往返序列化的示例? [关闭]

Posted

技术标签:

【中文标题】有没有人有 Delphi XE6 中 JSON 往返序列化的示例? [关闭]【英文标题】:Does anyone have an example of round trip serialization of JSON in Delphi XE6? [closed] 【发布时间】:2014-10-10 02:28:54 【问题描述】:

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

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

最好,我正在寻找一个实际的工作示例使用 XE(6) 本机库或组件 -- 但是,我将不胜感激任何人曾经获得的任何文章(文档、文章、帖子等)和/或任何其他库的链接这个工作。

【问题讨论】:

建议阅读,Serializing User Objects。应该使用 Delphi JSON 库回答您的问题。有关其他替代方案,请参阅Delphi JSON library for XE2 available for object serialization。 是的...我已经检查过了。发送。 【参考方案1】:

我会避免使用本机框架,主要原因是它序列化对象的私有成员,我认为这违反了 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.

【讨论】:

访问控制是一个编译时特性。所有字段都可能是相关的并且需要携带对象状态。 Java 和其他语言使用注解来指示哪些字段应该(不)被序列化。

以上是关于有没有人有 Delphi XE6 中 JSON 往返序列化的示例? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

delphi XE6 进行android开发关于真机使用EDIT或者MEMO出现假死重启问题。

在 Delphi 2007 DLL 和 XE6 EXE 之间传递 PChar

iOS中的Delphi XE6链接C代码

Delphi XE6 在安装 bpl 时崩溃

Delphi XE6“错误读取表格”

Delphi XE6 Android拨号函数