我有一个课程如下:
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以及简单的字符串。
答案 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;