有没有人有 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出现假死重启问题。