Data.FireDACJSONReflect多数据集与压缩字节流化的加密的JSon序列化-Delphi 10大数据的实现方法之Json序列化

Data.FireDACJSONReflect多数据集与压缩字节流化的加密的JSon序列化-Delphi 10大数据的实现方法之Json序列化

 

uses Data.FireDACJSONReflect 

// C:\Program Files (x86)\Embarcadero\Studio\20.0\source\data\datasnap\Data.FireDACJSONReflect.pas 

  TFDJSONInterceptor = class(TJSONInterceptor)

  public
    // Conversion utility methods
    class function ItemListToJSONObject(const AList: TItemList; const AJSONObject: TJSONObject): Boolean; static;
    class function DataSetsToJSONObject(const ADataSets: TFDJSONDataSetsBase; const AJSONObject: TJSONObject): Boolean; static;
    class function JSONObjectToItemList(const AJSONObject: TJSONObject; const AList: TItemList): Boolean; static;
    class function JSONObjectToDataSets(const AJSONObject: TJSONObject; const ADataSets: TFDJSONDataSetsBase): Boolean; static;
    destructor Destroy; override;
    // Reverter/Converter overrides
    function TypeObjectConverter(AData: TObject): TObject; override;
    function TypeObjectReverter(AData: TObject): TObject; override;
  end;

其中:ItemListToJSONObject

LJSONValue_ofDataSet := DataSetToJSONValue(LDataSet);   //: TJSONValue;

//:  function DataSetToJSONValue(const ADataSet: TFDAdaptedDataSet): TJSONValue;

      ->

S := DataSetToString(ADataSet);

//:  function DataSetToString(const ADataSet: TFDAdaptedDataSet): string;

 

      ->

function DataSetToString(const ADataSet: TFDAdaptedDataSet): string;
var
  LBinary64: string;
  LMemoryStream: TMemoryStream;
  LStringStream: TStringStream;
  LDstStream: TMemoryStream;
  Zipper: TZCompressionStream;
begin
  LDstStream := TMemoryStream.Create;
  try
    LMemoryStream := TMemoryStream.Create;
    try
      ADataSet.SaveToStream(LMemoryStream, TFDStorageFormat.sfBinary);
      LMemoryStream.Seek(0, TSeekOrigin.soBeginning);
      Zipper := TZCompressionStream.Create(clDefault, LDstStream);
      try
        Zipper.CopyFrom(LMemoryStream, LMemoryStream.Size);
      finally
        Zipper.Free;
      end;
    finally
      LMemoryStream.Free;
    end;
    LDstStream.Seek(0, TSeekOrigin.soBeginning);

    LStringStream := TStringStream.Create;
    try
      TNetEncoding.Base64.Encode(LDstStream, LStringStream);
      LBinary64 := LStringStream.DataString;
    finally
      LStringStream.Free;
    end;
  finally
    LDstStream.Free;
  end;
  Result := LBinary64;
end;

Base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。在实际应用上,Base64除了能将Binary资料可视化之外,也常用来表示字串加密过后的内容。采用Base64编码具有不可读性,需要Decode解码后才能阅读。https://baike.baidu.com/item/base64/8545775?fr=aladdin

// : 返回到客户端:类似这样的二进位Json即Bson数据的流化数据: 

{
    "result": [
        {
            "CtL00001": "eJztvQuYHMdxGDyASIikKJKiXrRESifZlkEbim/37gBcHMc+3AHEQfci7vgAE2cyNzu7O8TuzmJm\r\n9g5Hx4/Ejh3n5diOHb/imJEoy9GDT/AFkBAtkhIBUqDFl2RZ+ajo8dlxojhO+MuhZfLv7umZ6e6p\r\n6pnduwFACuBH4G6qu6enuqq6qrq6amJq1+KlxugVp67fbLxqbDI2vbr51TecZ1xmGMakERozxjD/\r\nr2KcDz7dQjoZxhsN+ucCw7jQ+Jnf+E3jIuPH32sYr77p1YvPM84jANeoke7xT1GXS4w3G5eSlgYZ\r\ndtNbjE2XG5veamx6m7Hp7car5M872N/vNDZdYWz6HmPTu4xN7zY2XZmMcRXr+Qp9wTvID7ZhknlZ\r\nxrLRMhyjQ35qk3/P18C2GJvZJN5jvNfYmUyCvJ68coi98kpN76tYn/exv9kkrsg0XSLzDNlP52uh\r\nW4w3JBOZQiai638V6/U+9jebysVJ4zWjy16vPtnC0Bi9cjPySrXPVazl+9jf7DUX8QY9I2AvkX/f\r\nQp7kvULukXkBxf5+ArANz/DJkk+Sf3tkBUK+rjBsC/kvS1zZdYV7C2RFf7iR4DlGovz7Fkby0fdh\r\nr5F7REO/L33BB8gPM2RBA/JeupyUrkzjOtK4Rp6G5Lcp9q9FXl687RbKhWRi7ze+lxEWNLHio11l\r\nvJO0/T42Epv0D+Z2XSR/+wSdNluo/tpvIfIjb/L9jZj5gCGw+wLp4JEB4mkXabWFLaV+skXGyUyR\r\nLs+UMUs62qShw79qDyPWReMQ4XqXPRnhhFGs7RbjTQnF/o9LcMIoNtpVbIz3sb9feeXV73/l1Q+8\r\nazI6arD5vIu08AlWGmwNIszGFPAeiQKyWLyC4X6Cjeqy2ftslAbBSbyGl/P5iLQq01vc8j1stCne\r\nZonRjMNGpbPp0qs1pL3FVuodygjx8ytBOowp5zLjevKTQ3AaP7mEYNQTft/Cf7+I/0sp/TIJQ/Q9\r\nV7B1aLGZRpiI+1+p8OQ+Psuo3yUS7gPj/wcCWOAL"
        }
    ]
}

 

// :        \r\n

\n是换行,英文是New line。\r是回车,英文是Carriage return。

 

建议大家养成习惯,尽快调整以前的老代码,尽快直接使用成熟的中间件,比如:高勇的“三层中间件源码库”,处理起来系统性、稳定性、安全性、并发性能很好。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专讲冷知识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值