C# 使用JSON.NET反序列化日期时间时如何保留时区?

C# 使用JSON.NET反序列化日期时间时如何保留时区?,c#,datetime,timezone,json.net,deserialization,C#,Datetime,Timezone,Json.net,Deserialization,我正在使用JSON.NET解析C#中的一些JSON。JSON中的一个字段是日期/时间,如下所示: { "theTime":"2014-11-20T07:15:11-0500", // ... a lot more fields ... } using (var streamReader = new StreamReader(rcvdStream)) { JsonTextReader reader = new JsonTextReader(streamReader)

我正在使用JSON.NET解析C#中的一些JSON。JSON中的一个字段是日期/时间,如下所示:

{
    "theTime":"2014-11-20T07:15:11-0500",
    // ... a lot more fields ...
}
 using (var streamReader = new StreamReader(rcvdStream))
 {
     JsonTextReader reader = new JsonTextReader(streamReader);
     JsonSerializer serializer = new JsonSerializer();
     JObject data = serializer.Deserialize<JObject>(reader);
     //...
  }
请注意,时间部分为07:15:11(格林尼治时间的TZ-5小时)

我从如下流解析JSON:

{
    "theTime":"2014-11-20T07:15:11-0500",
    // ... a lot more fields ...
}
 using (var streamReader = new StreamReader(rcvdStream))
 {
     JsonTextReader reader = new JsonTextReader(streamReader);
     JsonSerializer serializer = new JsonSerializer();
     JObject data = serializer.Deserialize<JObject>(reader);
     //...
  }
但是,这给了我这个DateTime对象:

{20/11/2014 12:15:11}
Date: {20/11/2014 00:00:00}
Day: 20
DayOfWeek: Thursday
DayOfYear: 324
Hour: 12
Kind: Local
Millisecond: 0
Minute: 15
Month: 11
Second: 11
Ticks: 635520825110000000
TimeOfDay: {12:15:11}
Year: 2014
我需要知道原始的本地时间和tz偏移量,但我似乎在反序列化过程中丢失了这些信息,它给了我时间,我认为这是我的本地时间(我在英国,所以现在是GMT+0)

在反序列化时,有没有办法保存时区信息

编辑:添加了更多关于我如何反序列化的详细信息。

我将使用它<代码>日期时间没有任何与之关联的有用时区信息

您可以通过更改序列化程序反序列化为
DateTimeOffset
。DateParseHandling:

JsonSerializer serializer = new JsonSerializer();
serializer.DateParseHandling = DateParseHandling.DateTimeOffset;

JObject data = serializer.Deserialize<JObject>(reader);

var offset = (DateTimeOffset)data["theTime"];

Console.WriteLine(offset.Offset);    // -5:00:00
Console.WriteLine(offset.DateTime);  // 11/20/2014 7:15:11 AM
JsonSerializer serializer=新的JsonSerializer();
serializer.DateParseHandling=DateParseHandling.DateTimeOffset;
JObject data=序列化程序。反序列化(读取器);
var offset=(DateTimeOffset)数据[“theTime”];
Console.WriteLine(offset.offset);//-5:00:00
Console.WriteLine(offset.DateTime);//2014年11月20日上午7:15:11

示例:

如何创建
序列化程序
对象?是否尝试将其反序列化/转换为DateTimeOffset而不是DateTime?我建议转换为UTC,以UTC发送/接收,并在客户端转换为本地时间进行显示。请注意,这篇文章建议与这篇文章重复,虽然它最初询问的是时区代码,但它有一个你想要的答案:你的字符串有时区偏移,它展示了如何正确解析包含时区偏移量的
DateTime
。我不同意这是一个重复的问题。链接到的另一个答案是关于解析DateTime,但不是来自Json反序列化程序。为了使其有用,他必须更改反序列化程序,将日期作为字符串返回,然后根据需要解析字符串<代码>serializer.DateParseHandling=DateParseHandling.None成功了!非常感谢。@Daview:当然可以,很高兴能帮上忙。