我看了很多相關的問題,但是他們都沒有爲我工作。Json.Net在序列化時爲DateTimeOffset弄亂了時區
我想序列化UTC中的所有東西。這裏是我的代碼:
class Class1
{
static void Main()
{
Class2 foo = new Class2();
JObject json = JObject.Parse(JsonConvert.SerializeObject(foo, new JsonSerializerSettings()
{
DateParseHandling = DateParseHandling.DateTimeOffset,
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc
}));
Console.WriteLine(json.ToString());
Console.Read();
}
}
class Class2
{
public DateTimeOffset time = new DateTimeOffset(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddTicks(14663484000000000));
public DateTimeOffset time2 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddTicks(14663484000000000);
public DateTime time3 = new DateTime(14663484000000000);
}
這裏的輸出:
{
"time": "2016-06-19T08:00:00-07:00",
"time2": "2016-06-19T08:00:00-07:00",
"time3": "0047-06-20T15:00:00Z"
}
這裏的我想要得到的輸出:
{
"time": "2016-06-19T15:00:00+00:00",
"time2": "2016-06-19T15:00:00+00:00",
"time3": "0047-06-20T15:00:00+00:00"
}
正如你所看到的,DateTimeOffset
性能不轉換在所有。 DateTime
是,但時區使用Z
表示,而我試圖使用+00:00
。
爲什麼要將'foo'序列化爲JSON字符串,然後將字符串解析爲JToken層次結構,然後將層次結構重新序列化爲字符串以重現您的問題?如果您只是直接將'foo'序列化爲字符串,那麼時區信息是正確的,是嗎? – dbc
@dbc我想爲序列化的JSON添加一些屬性,但是在試圖解決這個問題時我拿出了那部分內容。我到最後還是需要它。 – Zarwan