如何使JSON.NET反序列化为Microsoft Date Time?

时间:2015-10-12 23:41:13

标签: c# json serialization json.net

使用JsonSerializerSettings,我可以使用/序列化Microsoft DateTime格式,但DateTimes似乎继续使用ISO 8601标准反序列化

JsonSerializerSettings = new JsonSerializerSettings {
                    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
                }

我试图编写一个自定义的JsonConverter来处理反序列化,但是我遇到了转义字符问题。

writer.WriteValue ("\\/Date(" + x + ")\\/");

写作

"\\/Date(1446145200000)\\/"
以前有人曾经解决过这个问题吗?没有找到一个好的解决方案,一直在寻找很多方式

2 个答案:

答案 0 :(得分:3)

这里你不需要自定义转换器。使用DateFormatHandling = DateFormatHandling.MicrosoftDateFormat设置是正确的方法,适用于序列化和反序列化。确保您将设置传递给SerializeObjectDeserializeObject方法。如果您未通过设置,则会使用默认格式,即ISO 8601.

using System;
using Newtonsoft.Json;

public class Program
{
    public static void Main()
    {
        Foo foo = new Foo { Date = new DateTime(2015,10,29,19,0,0) };

        JsonSerializerSettings settings = new JsonSerializerSettings
        {
            DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
            Formatting = Formatting.Indented
        };

        string json = JsonConvert.SerializeObject(foo, settings);
        Console.WriteLine(json);

        foo = JsonConvert.DeserializeObject<Foo>(json, settings);
        Console.WriteLine(foo.Date.ToString());
    }
}

class Foo
{
    public DateTime Date { get; set; }
}

输出:

{
  "Date": "\/Date(1446145200000+0000)\/"
}
10/29/2015 7:00:00 PM

小提琴:https://dotnetfiddle.net/hnJIO4

答案 1 :(得分:0)

您的输入日期似乎已被序列化为刻度线。在自定义转换器中,您可以反序列化JSON值并使用它来初始化DateTime对象吗?