Neon - Serialization Library for Delphi
Neon - Serialization Library for Delphi
源码获取:https://github.com/paolo-rossi/delphi-neon
Neon是Delphi的序列化库,可帮助您将(来回)对象和其他值转换为 JSON。它支持简单的 Delphi 类型,但也支持复杂的类和记录。Neon在设计时考虑了REST ,用于在没有“元数据”或添加字段的应用程序之间交换纯数据,实际上Neon是WiRL REST 库的默认 JSON 序列化引擎。
配置
通过INeonConfiguration
界面进行广泛的配置:
- 单词大小写(大写、小写、PascalCase、camelCase、snake_case)
- 自定义案例(通过匿名方法)
- 成员类型(字段、属性)
- 如果您选择序列化字段,则可以选择忽略“F”
- 成员可见性(私有、受保护、公共、已发布)
- 自定义序列化程序注册
- 在序列化中使用 UTC 日期
Delphi 类型支持
Neon 支持大多数 Delphi 标准类型、记录、数组和当然类的(反)序列化。类可以像你想要的那样复杂,可以包含数组、(通用)列表、子类、记录等......
简单值
- 基本类型:字符串、整数、双精度、布尔值、TDateTime
复杂值
- (基本类型、记录、类等)的数组
- 具有(基本类型、记录、类、数组等)字段的记录
- 具有(基本类型、记录、类、数组等)字段的类
- 通用列表
- 字典(键必须是字符串类型)
- 可流式传输的课程
自定义序列化器
- 在配置中继承
TCustomSerializer
并注册新的序列化程序类
库/单元依赖项
该库不依赖于外部库/单元。
使用的delphi单位:
- System.JSON (DXE6+)
- System.Rtti (D2010+)
- System.Generics.Collections (D2009+)
序列化一个对象
使用 TNeon 实用程序类
序列化和反序列化的最简单方法是使用实用TNeon
程序类:
对象序列化:
var
LJSON: TJSONValue;
begin
LJSON := TNeon.ObjectToJSON(AObject);
try
Memo1.Lines.Text := TJSONUtils.PrettyPrint(LJSON);
finally
LJSON.Free;
end;
end;
对象反序列化:
var
LJSON: TJSONValue;
begin
LJSON := TJSONObject.ParseJSONValue(Memo1.Lines.Text);
try
TNeon.JSONToObject(AObject, LJSON, AConfig);
finally
LJSON.Free;
end;
使用 TNeonSerializer 和 TNeonDeserializer 类
使用TNeonSerializerJSON
和TNeonDeserializerJSON
类,您可以更好地控制该过程。
对象序列化:
var
LJSON: TJSONValue;
LWriter: TNeonSerializerJSON;
begin
LWriter := TNeonSerializerJSON.Create(AConfig);
try
LJSON := LWriter.ObjectToJSON(AObject);
try
Memo1.Lines.Text := TJSONUtils.PrettyPrint(LJSON);
MemoError.Lines.AddStrings(LWriter.Errors);
finally
LJSON.Free;
end;
finally
LWriter.Free;
end;
end;
对象反序列化:
var
LJSON: TJSONValue;
LReader: TNeonDeserializerJSON;
begin
LJSON := TJSONObject.ParseJSONValue(Memo1.Lines.Text);
if not Assigned(LJSON) then
raise Exception.Create('Error parsing JSON string');
try
LReader := TNeonDeserializerJSON.Create(AConfig);
try
LReader.JSONToObject(AObject, LJSON);
MemoError.Lines.AddStrings(LWriter.Errors);
finally
LReader.Free;
end;
finally
LJSON.Free;
end;
配置Neon非常容易,
var
LConfig: INeonConfiguration;
begin
LConfig := TNeonConfiguration.Default
.SetMemberCase(TNeonCase.SnakeCase) // Case settings
.SetMembers(TNeonMembers.Properties) // Member type settings
.SetIgnoreFieldPrefix(True) // F Prefix settings
.SetVisibility([mvPublic, mvPublished]) // Visibility settings
// Custom serializer registration
.GetSerializers.RegisterSerializer(TGUIDSerializer)
;
end;
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/16350712.html