【问题标题】:Delphi Datasnap - How to customize JSON marshallingDelphi Datasnap - 如何自定义 JSON 编组
【发布时间】:2026-01-24 15:10:02
【问题描述】:
在我的 Delphi 10.1 Berlin Datasnap REST 应用程序中,我需要自定义对象的 JSON 序列化。
我想找到一个利用 JSONReflect 属性的解决方案,并且不涉及为每个特定字段创建转换器和恢复器,如 Daniele Teti 在this article 中所述。
特别是,我正在尝试序列化包含以下内容的对象:
- 二进制文件,以 JSON 表示形式转换 - 像字节数组
- 一些 TDateTime 字段,转换为 ISO 格式的字符串
我找到了 Marco Cantù 的 technical PDF document,其中谈到了启用字段转换的 JSONReflect 属性,但我找不到有关它的文档。
有人可以帮帮我吗?
【问题讨论】:
标签:
json
delphi
marshalling
datasnap
delphi-10.1-berlin
【解决方案1】:
使用 JSONReflect 属性自动意味着使用转换器和还原器。 Delphi XE6 附带了示例项目 MarshallUnmarshall,其中涵盖了 JSON 序列化。 RAD Studio 演示代码也可在online 获得。
如果您想序列化包含 ISO 格式字符串中的 TDateTime 字段的对象,您还可以使用在 Rest.Json 单元中定义的标准 Tjson 类。它包含一个ObjectToJsonString 方法。在 AOptions 参数中,您可以指定使用 ISO 标准格式化日期。
class function ObjectToJsonString(AObject: TObject; AOptions: TJsonOptions = [joDateIsUTC, joDateFormatISO8601]): string;
要在 JSON 中序列化二进制文件 Daniele Teti 在他的Delphi Cookbook 中有示例代码。不幸的是,我无法分享我认为的示例代码。推荐阅读! Second edition 刚刚出现。