【问题标题】: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 刚刚出现。

    【讨论】:

      最近更新 更多