首页 > 其他分享 >delphi 自带 的JOSN 序列化 三

delphi 自带 的JOSN 序列化 三

时间:2023-08-14 18:46:16浏览次数:40  
标签:AWriter const delphi TValue TConverterEx Create end 序列化 JOSN

  TConverterEx<T: class> = class(TJsonConverter)
  public
    function CanConvert(ATypeInf: PTypeInfo): Boolean; override;
    function ReadJson(const AReader: TJsonReader; ATypeInf: PTypeInfo; const AExistingValue: TValue;
      const ASerializer: TJsonSerializer): TValue; override;
    procedure WriteJson(const AWriter: TJsonWriter; const AValue: TValue;
      const ASerializer: TJsonSerializer); override;
  end;

{ TConverterEx<T> }

function TConverterEx<T>.CanConvert(ATypeInf: PTypeInfo): Boolean;
begin
  Result := ATypeInf = TypeInfo(TObjectList<T>); 
end;

function TConverterEx<T>.ReadJson(const AReader: TJsonReader;
  ATypeInf: PTypeInfo; const AExistingValue: TValue;
  const ASerializer: TJsonSerializer): TValue;
begin
  raise Exception.Create('未实现');
end;

procedure TConverterEx<T>.WriteJson(const AWriter: TJsonWriter;
  const AValue: TValue; const ASerializer: TJsonSerializer);
begin
  if AValue.IsObjectInstance then
  begin
    var L := AValue.AsObject as TObjectList<T>;
    AWriter.WriteStartArray;
    for var I := 0 to L.Count - 1 do
      ASerializer.Serialize<T>(AWriter, L[I]);
    AWriter.WriteEndArray;
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  var s := TJsonSerializer.Create;
  s.Formatting := TJsonFormatting.Indented;
  s.ContractResolver := TJsonDefaultContractResolver.Create(TJsonMemberSerialization.Public);
  s.Converters.Add(TConverterEx<TObjectValue>.Create);  //一次注册,不用到处贴签了
  var obj := TTestObject.Create;
  var jsonString := s.Serialize<TTestObject>(obj);
  Memo1.Lines.Add(jsonString);
  s.Free;
end;

 

标签:AWriter,const,delphi,TValue,TConverterEx,Create,end,序列化,JOSN
From: https://www.cnblogs.com/Jiaojiawang/p/17629447.html

相关文章

  • 漏洞复现报告:CVE-2020-2551 IIOP反序列化漏洞
    1.漏洞描述: 2020年1月15日,Oracle发布了一系列的安全补丁,其中OracleWebLogicServer产品有高危漏洞,漏洞编号CVE-2020-2551,CVSS评分9.8分,漏洞利用难度低,可基于IIOP协议执行远程代码。Weblogic是一个服务器,可以做web服务器也可以做应用服务器WebLogic是美国Oracle公司出品的......
  • 序列化 - Kryo序列化详解
    什么是序列化序列化是指将数据结构或对象转换为可存储或传输的格式,以便在稍后的时间点重新构建或恢复原始数据结构或对象的过程。在计算机科学和编程中,序列化通常用于将内存中的数据转换为可以在磁盘上保存或通过网络传输的形式,以便在需要时进行持久化存储或在不同系统之间进行数......
  • 序列化 - jdk序列化详解
    当谈到在Java中将对象转换为字节流以便于存储、传输或持久化时,不可避免地会涉及到JDK序列化。JDK序列化是Java编程语言提供的一种机制,允许开发者将对象转换为字节序列,以便在稍后的时间点能够重新构建或恢复对象的状态。本文将深入介绍JDK序列化的概念、用法以及一些相关的......
  • 数据序列化工具Protobuf编码&避坑指南
    我们现在所有的协议、配置、数据库的表达都是以protobuf来进行承载的,所以我想深入总结一下protobuf这个协议,以免踩坑。先简单介绍一下ProtocolBuffers(protobuf),它是Google开发的一种数据序列化协议(与XML、JSON类似)。它具有很多优点,但也有一些需要注意的缺点:优点:效......
  • Delphi 2010 新增功能之: IOUtils 单元(6): TPath(结构体) 的方法与属性
    以后路径相关的处理,用IOUtils.TPath就很方便了.//较常用的方法:TPath.GetTempPath;         {获取临时文件夹路径}TPath.GetTempFileName;       {获取一个临时文件名}TPath.GetPathRoot();        {提取盘符,如:c:......
  • lazarus、delphi文件Http下载断点续传的实现
    下载大文件时,断点续传是很有必要的,特别是网速度慢且不稳定的情况下,很难保证不出意外,一旦意外中断,又要从头下载,会很让人抓狂。断点续传就能很好解决意外中断情况,再次下载时不需要从头下载,从上次中断处继续下载即可,这样下载几G或十几G大小的一个文件都没问题。本文介绍利用minifra......
  • URLDNS的反序列化调试分析
    Java反序列化(0):URLDNS的反序列化调试分析URLDNS链子是Java反序列化分析的第0课,网上也有很多优质的分析文章。笔者作为Java安全初学者,也从0到1调试了一遍,现在给出调试笔记。一.Java反序列化前置知识Java原生链序列化:利用Java.io.ObjectInputStream对象输出流的writerObject......
  • Delphi 2010 新增功能之: IOUtils 单元(4): TDirectory.GetDirectories
    转自万一 https://www.cnblogs.com/del/archive/2009/10/16/1584768.html 和TDirectory.GetFiles用法一样,TDirectory.GetDirectories是用来获取子目录的.另外还有TDirectory.GetFileSystemEntries可同时获取文件与子目录,用法都一样.unitUnit1;interfaceuse......
  • delphi FastReport 打印设置
    FastReport打印设置属性和方法TfrxPrintOptions.CopiespropertyCopies:Integer;默认可打印份数。默认值为1。TfrxPrintOptions.DuplexpropertyDuplex:TfrxDuplexMode;全局双工设置。仅在准备报表后设置。TfrxPrintOptions.PrintModepropertyPrintMode:TfrxPrin......
  • delphi文章等
    在Delphi编程中的文件操作http://news.softhouse.com.cn/news/show/15723.htmldelphi关于文件操作的函数  http://www.cncfan.com/cncfan_com_article.asp?art_id=2502&cat_id=74关于文本文件http://www.75pc.com/viewthread.php?tid=2586,http://www.27a.cn/data/2006/0524/ar......