【问题标题】:Prevent Json.NET from interpreting a string as a date防止 Json.NET 将字符串解释为日期
【发布时间】:2017-11-17 19:25:48
【问题描述】:

我有一些从休息服务返回的属性作为名称-值对的数组。

在某些情况下,该值是以通用可排序格式表示的日期: { "name": "修改日期", “价值”:“2017-11-13T15:15:13.968Z” }

当它被反序列化器解析时,该值被识别为日期,但考虑到该对被反序列化为名称和值的类型为字符串,然后日期将转换为字符串并失去精度:“ 2017 年 13 月 11 日 15:15:13"

使用 NameValue 类型的转换器很容易看到这一点。

if (reader.TokenType == JsonToken.StartObject)
{
    var item = JObject.Load(reader);

    return new NameValueFacet()
    {
        Name = item["name"].Value<string>(),
        Value = item["value"].Value<string>()
    };
}

item["value"].Type 显示类型为 Date。

如何让 Json.NET 将其保留为字符串“未解析”?

【问题讨论】:

  • 设置 reader.DateParseHandling = DateParseHandling.None;在调用 JObject.Load(reader) 解决问题之前。有什么方法可以在我的 NameValue 类的 Value 属性上指定一个 Json 属性来获得相同的结果,而无需使用转换器?
  • 请编辑您的问题,而不是将其放在评论中。
  • 在单个属性上没有关闭日期解析的属性,但是您可以通过在JsonSerializerSettings 中设置DateParseHandling = DateParseHandling.None 并将设置传递给JsonConvert.DeserializeObject 来全局关闭它。小提琴:dotnetfiddle.net/1y1bXM

标签: date json.net


【解决方案1】:

您可以尝试使用 Newtonsoft。见下文。

JsonConvert.DeserializeObject<your_object>(your_json, new IsoDateTimeConverter{ DateTimeFormat = "dd/MM/yyy" });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多