首页 > 其他分享 >待整理

待整理

时间:2024-03-03 09:01:43浏览次数:19  
标签:begin end field 整理 sb fieldValue Append

function TDJson.serialize(obj: TObject): string;
var
  objType, fieldType, enumType: TRttiType;
  I, oldLength, listCount: Integer;
  field: TRttiField;
  fieldName, fieldTypeName: string;
  itemMethod: TRttiMethod;
  fieldValue: TValue;
  ps: PString;
  pi: PInteger;
  pi4: PInt64;
begin
  if obj = nil then
  begin
    Exit;
  end;

  sb.Append('{');
  objType := ctx.GetType(obj.ClassType);
  oldLength := sb.Length;
  for field in objType.GetFields do
  begin
    //获取字段信息,字段类型为3种类:基本类型包装类、自定义类、List
    fieldName := field.Name;
    fieldType := field.FieldType;
    fieldTypeName := fieldType.Name;
    fieldValue := field.GetValue(obj);

    //判断值是否为空,因为值一旦为空,就没有向下判断的意义了
    if not fieldValue.IsEmpty then
    begin
      //判断字段类型
      case fieldValue.Kind of
        tkEnumeration: ;
        tkClass: ;
        tkArray: ;
        tkDynArray: ;
        //二维指针 PString、PInteger、PInt64、PCurrency、PBoolean、
        tkPointer: begin
          //可以使用isEmpty判断,他内部通过FAsPointer来判断
          if not fieldValue.IsEmpty then
          begin
            if fieldTypeName then
            begin

            end;
            sb.Append('"').Append(fieldName).Append('":"').Append(fieldValue.AsType<PString>^).Append('"');
          end;
        end;

        else raise Exception.Create('开发人员错误,类型有误!');
      end;
    end;










    //判断类型
    if fieldTypeName = 'PUnicodeString' then
    begin
      //判断值是否为nil

      var wokao := value.AsType<PString>^;


    end;
  end;
  if sb.Length <> oldLength then
  begin
    //说明存在Field被序列化成了JSON,去除内部Field最后的逗号
    sb.Remove(sb.Length - 1, 1);
    //缝上外部逗号,组成完整对象
    sb.Append('}');
  end else begin
    //说明对象没有值移除开始的{
    sb.Remove(sb.Length - 1, 1);
  end;
end;


procedure TForm1.btn1Click(Sender: TObject);
var
  p: TPerson;
  dj: TDJson;
begin
  p := TPerson.Create;
  dj := TDJson.Create;
  try
//    p.setName('wokao');
//    p.setName('wokao2');
    p.setAge(10);
    mmo1.Lines.Clear;
    //mmo1.Lines.Add(p.getName);
    mmo1.Lines.Add(p.getAge.ToString);

    mmo1.Lines.Add(dj.objToJson(p));



  finally
    p.Free;
    dj.Free;
  end;
end;

标签:begin,end,field,整理,sb,fieldValue,Append
From: https://www.cnblogs.com/del88/p/18049585

相关文章

  • 自整理2.23版本下的malloc和free流程
    ''''malloc流程:1.如果处于mmap的范围,直接调用mmap分配2.如果所需分配内存在fastbin的范围里会在fastbin里查找空闲的合适大小的chunk,如找到则结束。3.如果所需分配的内存在smallbin的范围里,就去smallbin里查找,如找到则结束。4.如果所需分配的内存不在smallbin里(也就是大于0x......
  • 01. 创建项目及整理素材
    创建项目注意,需要使用unity2023.3及以上的版本,使用2DURP模板,项目名字叫做DreamOfTheKingdom修改项目配置打开Preferences->SceneView,勾选CreateObjectsatOrigin修改PackageManager打开InProject,移除VisualScripting安装DoTween、ColourfulHierarchy......
  • EndNote 21:文献整理与引用,一键轻松搞定 mac/win版
    EndNote21是一款功能强大的文献管理软件,专为学术研究者、学生和教师设计。它提供了全面的文献管理解决方案,帮助用户轻松整理、引用和分享学术文献。→→↓↓载EndNote21mac/win版EndNote21拥有直观的用户界面和强大的文献检索功能,用户可以轻松地从各种数据库和在线资源中导......
  • pytest学习整理
    一、安装及入门1.安装及使用条件支持的python版本:python2.6及以上支持的平台:Unix、Posix、Windows安装pytest:pipinstall–Upytest查看安装的pytest版本:pytest–version2.入门小栗子importpytest#被测函数deffun(x):returnx+1#测试函数deftest_Fun......
  • GitHub上整理的一些工具(平台工具)
    平台工具(都是开源的好东东哦)Redmine/Trac:项目管理平台Jenkins/Jira(非开源):持续集成系统(ApacheContinuum,这个是Apache下的CI系统,还没来得及研究)Sonar:代码质量管理平台git,svn:源代码版本控制系统GitLib/Gitorious:构建自己的GitHub服务器gitbook:https://www.gitbook.io/写书......
  • GitHub上整理的一些工具(Web 前端相关)
    Web服务器性能/压力测试工具/负载均衡器http_load:程序非常小,解压后也不到100Kwebbench:是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力ab:ab是apache自带的一款功能强大的测试工具Siege:一款开源的压力测试工具,可以根据配置对一个WEB......
  • 日志解析对照表整理
         ......
  • 常用sql整理
    选择:select*fromtable1where范围插入:insertintotable1(field1,field2)values(value1,value2)删除:deletefromtable1where范围更新:updatetable1setfield1=value1where范围查找:select*fromtable1wherefield1like’%value1%’ 排序:select*fromtable1......
  • 多项式模板整理
    约定\(F[i]\)表示\(F(x)\)的\(i\)次项系数。多项式乘法基础详情见多项式乘法入门多项式求逆给出\(n\)次多项式\(F(x)\),求一个多项式\(G(x)\),满足\(F(x)G(x)\equiv1\pmod{x^n}\),\(G(x)\)每个系数对\(998244353\)取模。我们逐一递推,假设已知\(G[1...i-1]\),需......
  • 揭秘一线大厂Redis面试高频考点(3万字长文、吐血整理)
    ###3万+长文揭秘一线大厂Redis面试高频考点,整理不易,求一键三连:点赞、分享、收藏本文,已收录于,我的技术网站aijiangsir.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享1、说说什么是Redis?Redis是一个开源的、基于内存的高性能键值对数据库,支持多种类型的数据结构,如字符......