反序列化iso 8601日期

时间:2014-03-19 20:20:11

标签: c# json datetime json.net iso8601

我有一个课程如下:

public class ViewItem
{
    [DataMember(Name = "title")]
    public string Title { get; set; }

    [DataMember(Name = "created_at")]
    public string CreatedAt { get; set; }
}

当我尝试将json字符串反序列化为object时,我永远无法获得CreatedAt字段的值。我的json字符串如下:

[ { "created_at" : "2014-03-05T10:26:12Z" ,
    "title"      : "task 4"
  } ,
  { "created_at" : "2014-03-05T10:26:12Z" ,
    "title"      : "task 5"
  }
]

反序列化代码如下:

JsonConvert.DeserializeObject<List<ViewItem>>(json);

我已阅读this article并试图提供不同的json转换以及日期解析处理,但它不起作用。

更新

我尝试过CreatedAt属性作为DateTime,DateTime?和DateTimeOffset以及简单的字符串。

3 个答案:

答案 0 :(得分:4)

尝试将[DataContract]添加到您的班级声明中。同时将CreatedAt属性的类型从string更改为DateTime

[DataContract]
public class ViewItem
{
    [DataMember(Name = "title")]
    public string Title { get; set; }

    [DataMember(Name = "created_at")]
    public DateTime CreatedAt { get; set; }
}

通过这些更改(以及对JSON的修复),它适用于我:

string json = @"[{""created_at"":""2014-03-05T10:26:12Z"",""title"":""task 4""},{""created_at"":""2014-03-05T10:26:12Z"",""title"":""task 5""}]";

List<ViewItem> list = JsonConvert.DeserializeObject<List<ViewItem>>(json);
foreach (ViewItem item in list)
{
    Console.WriteLine("Title: " + item.Title);
    Console.WriteLine("CreatedAt: " + item.CreatedAt);
}

输出:

Title: task 4
CreatedAt: 3/5/2014 10:26:12 AM
Title: task 5
CreatedAt: 3/5/2014 10:26:12 AM

答案 1 :(得分:0)

您使用的DataMemberAttribute来自System.Runtime.Serialization。但JsonConvert来自Newtonsoft.Json进行反序列化。

使用:

[JsonProperty("title")]

而不是:

[DataMember(Name = "title")]

答案 2 :(得分:0)

DateTime dateProperty=Convert.ToDateTime(DateTime)

将产生

  

&#34; dateProperty&#34;:&#34; /日期(1343966400000-0400)/&#34;

鉴于:

string dateProperty=Convert.ToString(DateTime)

将产生

  

&#34; dateProperty&#34;:&#34; 8/3/2012 6:20:43 PM&#34;