在序列化DateTime
或DateTimeOffset
时,我会根据第二部分获得不一致的结果。如果fraction == 0
,则第二部分为00
,如果fraction > 0
,则第二部分为00.999
。
class MyDateHoldingThingy
{
public DateTime DateTime { get; set; }
public DateTimeOffset DateTimeWithTz { get; set; }
public string GimmeJson()
{
return JsonConvert.SerializeObject(this);
}
}
public void SerializeDateThingy(int fraction)
{
var d = new MyDateHoldingThingy
{
DateTime = new DateTime(2017, 4, 3, 19, 21, 0, fraction),
DateTimeWithTz = new DateTimeOffset(2017, 4, 3, 19, 21, 0, fraction, TimeSpan.FromHours(2))
};
Console.WriteLine(d.GimmeJson());
}
使用
进行通话SerializeDateThingy(0);
SerializeDateThingy(999);
结果
{"DateTime":"2017-04-03T19:21:00","DateTimeWithTz":"2017-04-03T19:21:00+02:00"}
{"DateTime":"2017-04-03T19:21:00.999","DateTimeWithTz":"2017-04-03T19:21:00.999+02:00"}
如果直接使用Newtonsoft JSON,我可以传递
new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.fff" }
......这给了我所需的一致性。我试图在我们的解决方案中修改输出,这是WCF / ASP.NET + OData的混合,我甚至不知道序列化是通过Json.net而不是通过.NET序列化器发生的(但那会最有可能产生Date(...)
值 - 仍然需要调查更多,但我没有看到任何直接引用Json.net。
请注意我自己没有进行序列化!在处理输出时,OData会对此进行介绍。在我的情况下,我实际上没有权力直接调用串行器。上面的代码只是显示输出不一致的示例,这似乎是默认行为。
到目前为止,问题是:
IsoDateTimeConverter
(如果使用Json.net)?