1

我试图在反序列化期间有选择地将(仅某些而不是全部)有效日期字符串解析为 DateTimeOffset。有没有人做到这一点?

这是我试图将其反序列化为 JObject 的 Json:

{
  "SomeDate": "2019-09-19T01:21:00.747Z",
  "SomeString": "2019-09-19T01:21:00.747Z"
}

这是我正在使用的反序列化器:

JsonSerializer Deserializer = new JsonSerializer
        {
            DateParseHandling = DateParseHandling.DateTimeOffset
        };

如您所料,这是我返回的 JObject:

{
  "SomeDate": "2019-09-19T01:21:00.747+00:00",
  "SomeString": "2019-09-19T01:21:00.747+00:00"
}

但我只想将 SomeDate 反序列化为 DateTimeOffset 并按原样保留 SomeString :

{
  "SomeDate": "2019-09-19T01:21:00.747+00:00",
  "SomeString": "2019-09-19T01:21:00.747Z"
}

我无法使用自定义转换器装饰 SomeString 属性,因为我正在反序列化为 JObject,因此我没有放置装饰器的类

4

1 回答 1

0

我假设您希望行为依赖于序列化值。

如果是这样,您可能必须提供自己的序列化程序。见:https ://blog.kulman.sk/custom-datetime-deserialization-with-json-net/

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
    if (reader.Value == null)
    {
        return null;
    }

    var s = reader.Value.ToString();

    if (s.Contains("+"))
    {
        // DateTimeOffset
    }
    else
    {
        // DateTime
    }
}

完成此操作后,您可以将其注册为序列化程序设置。

于 2019-09-25T20:02:31.777 回答