在JSON.net中解析UTC时间

时间:2014-06-26 02:17:17

标签: json.net

我有一个JSON文件,我已将其反序列化为我创建的名为MyType

的类
JsonConvert.DeserializeObject<MyType>(json);

其中一个JSON属性是Time,以UTC表示。 我把这个UTC时间转换成DATETIME对象

DateTime timestamp = DateTime.ParseExact(
    JsonTime, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);

当UTC时间为以下时,以上情况正常:2014-06-25T00:30:07.9289078 + 00:00

但是请注意:2014-06-24T00:31:08.62124 + 00:00

我怀疑这很可能是因为“+”之前缺少尾随“0”

我正在玩JSON.net,并试图使用Jtoken.Parse方法,这似乎正在做我想要的。

var t = Newtonsoft.Json.Linq.JToken.Parse(
      @"{ ""x"": ""2014-06-24T00:31:08.62124+00:00"" }").Value<DateTime>("x");

JToken.Parse如何正确转换此UTC时间以及如何在JsonConvert.DeserializeObject<MyType>(json);中使用它?

我试着设置这个

public static JsonSerializerSettings JsonSerializerSettings1
{
  get
  {
     return new JsonSerializerSettings { DateParseHandling = DateParseHandling.DateTime};
  }
}
.......
return JsonConvert.DeserializeObject<MyType>(json, JsonSerializerSettings1);

在反序列化期间,它仍然不会将UTC转换为日期时间

1 个答案:

答案 0 :(得分:8)

您是否尝试将DateFormatHandling设为IsoDateFormat而将DateTimeZoneHandling设为Utc

class Program
{
    static void Main(string[] args)
    {
        string json = @"{ ""Date"": ""2014-06-24T00:31:08.62124+00:00"" }";

        JsonSerializerSettings settings = new JsonSerializerSettings
        {
            DateFormatHandling = DateFormatHandling.IsoDateFormat,
            DateTimeZoneHandling = DateTimeZoneHandling.Utc
        };

        MyType obj = JsonConvert.DeserializeObject<MyType>(json, settings);

        Console.WriteLine(obj.Date.ToString());
    }
}

class MyType
{
    public DateTime Date { get; set; }
}