ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Neon - Serialization Library for Delphi

2022-06-07 10:02:47  阅读:171  来源: 互联网

标签:end LJSON Delphi Neon finally Serialization 序列化


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 类

使用TNeonSerializerJSONTNeonDeserializerJSON类,您可以更好地控制该过程。

对象序列化:

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;

标签:end,LJSON,Delphi,Neon,finally,Serialization,序列化
来源: https://www.cnblogs.com/hnxxcxg/p/16350712.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有