【问题标题】:When overriding default configuration for Date Serialization, it becomes missing in the JSON example in metadata pages覆盖日期序列化的默认配置时,元数据页面的 JSON 示例中缺少它
【发布时间】:2015-07-18 03:45:19
【问题描述】:

我正在尝试使用以下代码覆盖默认的 DateTime 序列化:

JsConfig<DateTime>.SerializeFn = d =>
        {
            return d.ToString("o") + "Z";
        };
JsConfig<DateTime>.RawSerializeFn = d =>
        {
            return d.ToString("o") + "Z";
        };

(不确定 SerializeFn 和 RawSerializeFn 之间的差异,所以我尝试确定...我还尝试实现 DeserializeFn,以防它们都需要被覆盖,但看到了一些结果)

无论如何...每次我尝试此操作时,我们 DTO 中的任何日期成员都会在元数据页面上的示例请求/响应 JSON 中丢失。 (日期成员仍然显示在参数部分)。

我正在使用 SS v4.0.40.0

PS:我后来意识到,我将“Z”附加到所有日期时间的整个目标可以通过这种配置来实现:

        JsConfig.DateHandler = DateHandler.ISO8601;
        JsConfig.AssumeUtc = true;
        JsConfig.AppendUtcOffset = false;

但我仍然想提交这个错误 - 谢谢!

【问题讨论】:

    标签: servicestack


    【解决方案1】:

    DateTime 序列化不能单独更改,如果您接管序列化为不受支持的自定义格式,您还需要使用适当的 RawDeserializeFn/DeserializeFn 配置对其进行反序列化处理。

    您还可以通过注册 ParseError 回调来处理解析未知的DateTime 格式,即:

    DateTimeSerializer.OnParseErrorFn = (dateTimeStr, ex) => //DateTime;
    

    如果您想对任何 ServiceStack 库提出问题,请升级到最新版本的 ServiceStack 以确保它仍然是一个问题,如果是,请将其提交给 github.com/ServiceStack/Issues,并附上重现该问题的示例代码/失败测试.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2016-10-29
      相关资源
      最近更新 更多