如何在此Json字符串上反序列化“Items”类部分:
{
"Buddies": {
"count": 1,
"items": [
{
"id": "5099207ee4b0cfbb6a2bd4ec",
"firstName": "Foo",
"lastName": "Bar",
"image": {
"url": "",
"sizes": [
60,
120,
180,
240,
360
],
"name": "myphoto.png"
}
}
]
}
}
我所拥有的原始课程是:
public class Buddy
{
public IEnumerable<Item> Items { get; set; }
public class Item {
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
但是json的上半部分对我来说是无用的,我想要使用这个类:
public class Buddy
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
答案 0 :(得分:8)
这是一种使用JSONPath的方法,假设您的JSON位于名为json
的变量中:
var buddies = JObject.Parse(json).SelectToken("$.Buddies.items").ToObject<Buddy[]>();
答案 1 :(得分:3)
我不知道开箱即用的解决方案(如果有的话),但是为了构建新的集合,是什么阻止你编写类似于下面所示的几行代码:
var obj = JsonConvert.DeserializeObject<dynamic>(jsonstring);
var items = new List<Buddy>();
foreach (var x in obj.Buddies.items)
{
items.Add(new Buddy
{
Id = x.id,
FirstName = x.firstName,
LastName = x.lastName
});
}
答案 2 :(得分:0)
创建一个JsonConverter
,其中一个可以遍历属性及其值并创建所需的对象。有关更多信息,请参阅在stackoverflow中搜索JsonConverter,例如的 http://stackoverflow.com/questions/2315570/json-net-how-to-serialize-a-class-using-custom-resolver 即可。我也喜欢Jaroslaw的方法
答案 3 :(得分:0)
您可以使用此代码:
dynamic dictionary =
(JsonConvert.DeserializeObject <IDictionary<string, object> > (jsonstring) )["Buddies"];
var response = dictionary.items;
foreach (var item in response)
{
var firstName= item.firstName;
}