有没有类似Go语言的Delphi XML序列化/反序列化库支持record类型?
Delphi XML 反序列化到 Record 的现成解决方案
方案1:轻量 XmlSerializer 开源库
这是专门适配Delphi的轻量XML序列化组件,无额外依赖,体积极小,原生支持record类型,映射逻辑和Go的标签用法高度相似:通过Delphi自定义属性标记字段对应XML属性/子节点,同时支持动态数组、嵌套record等复杂结构,完全匹配你的需求。
使用示例
首先给你的record类型添加映射标记:
uses Xml.Serializer; type TAddress = record [XmlAttribute] // 标记为映射到XML节点属性 City: string; [XmlAttribute] State: string; end; TAccount = record ID: string; // 默认映射为子节点,和你提供的XML结构匹配 end; TAccounts = record [XmlAttribute] ID: string; [XmlArrayItem('Account')] // 指定数组子项的节点名称 Account: TArray<TAccount>; end; [XmlRoot('person')] // 指定根节点名称 TPerson = record Address: TAddress; [XmlAttribute] AccountsID: Integer; Accounts: TAccounts; end;
反序列化仅需几行代码:
var serializer: IXmlSerializer; person: TPerson; xmlContent: string; begin // 自行读取XML文件内容存入xmlContent变量 serializer := TXmlSerializer.Create; person := serializer.Deserialize<TPerson>(xmlContent); // 直接使用person的字段即可,全程不需要手动释放任何对象 end;
方案2:mORMot 框架序列化模块
如果你可以接受引入成熟的第三方基础库,可以用mORMot的序列化核心模块,该模块支持单独拆分使用,不需要引入整个框架,支持record类型的XML/JSON双向序列化,经过大量生产环境验证,稳定性和性能都优于普通RTTI实现,也支持自定义映射规则。
内容的提问来源于stack exchange,提问作者Para
相关产品推荐
相关产品推荐

