一尘不染

Json.NET在DateTime上禁用反序列化

c#

这是代码:

        string s = "2012-08-08T01:54:45.3042880+00:00";

        JObject j1 = JObject.FromObject(new
        {
            time=s
        });

        Object o = j1["time"];

我们可以检查o是否为字符串并等于“ 2012-08-08T01:54:45.3042880 + 00:00”

现在我们将j1.ToString()转移到另一个程序,即

       {
          "time": "2012-08-08T01:54:45.3042880+00:00"
       }

然后在另一个程序中,尝试将其解析回JObject

       JObject j2 = JObject.Parse(j1.ToString());

       Object o2 = j2["time"];

现在,如果我们检查o2,则o2的类型为Date,o2.ToString()为8/7/2012 9:54:45 PM。

我的问题是:

有没有办法禁用JObject.Parse的Date反序列化,而只获取原始字符串?

提前致谢


阅读 221

收藏
2020-05-19

共1个答案

一尘不染

从解析object到时,JObject您可以指定JsonSerializer指示如何处理日期的。

JObject.FromObject(new { time = s },
                   new JsonSerializer {
                          DateParseHandling = DateParseHandling.None
                   });

不幸的Parse是没有这个选项,尽管拥有它很有意义。查看源代码,Parse我们可以看到它所做的只是实例化a
JsonReader,然后将其传递给LoadJsonReader确实有解析选项。

您可以这样实现所需的结果:

  JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()));
  reader.DateParseHandling = DateParseHandling.None;
  JObject o = JObject.Load(reader);
2020-05-19