如何制作JSON.NET反序列化到Microsoft日期时间

本文关键字:Microsoft 日期 时间 反序列化 何制作 JSON NET | 更新日期: 2023-09-27 18:17:34

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

JsonSerializerSettings = new JsonSerializerSettings {
                    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
                }

我试图写一个自定义的JsonConverter来处理反序列化,但我有转义字符的麻烦。

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

写成

"''/Date(1446145200000)''/"

以前有人解决过这个问题吗?一直在寻找方法,但没有找到一个好的解决方案

如何制作JSON.NET反序列化到Microsoft日期时间

这里不需要自定义转换器。使用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

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