使用JsonSerializerSettings,我能够使用/序列化Microsoft DateTime格式,但是DateTimes似乎继续使用ISO 8601标准反序列化
JsonSerializerSettings = new JsonSerializerSettings {
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
}
我试图写一个自定义的JsonConverter来处理反序列化,但我有转义字符的麻烦。
writer.WriteValue ("\/Date(" + x + ")\/");
写成
"\/Date(1446145200000)\/"
以前有人解决过这个问题吗?一直在寻找方法,但没有找到一个好的解决方案
这里不需要自定义转换器。使用DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
设置是正确的方法,并且对序列化和反序列化都有效。确保将设置适当地传递给SerializeObject
和DeserializeObject
方法。如果您不传递设置,它将使用默认格式,即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对象吗?