【发布时间】:2015-07-16 05:39:38
【问题描述】:
我是 JSON.NET 的新手,不知道该怎么做。
我有CartItem类,需要实现GetAllCartItemsFromArbitraryJson(string jsonStr),如下:
class CartItem {
public int Id;
public int Qty;
}
List<CartItem> items = GetAllCartItemsFromArbitraryJson(jsonStr);
我只知道jsonStr 在某处包含一个或多个cartitems(我不知道有多深),例如。
{
... : {
"cartitems": [{
"id": "1",
"qty": "1"
},{
"id": "2",
"qty": "5"
}
]
},
... : {
... : {
...,
"cartitems": [{
"id": "10",
"qty": "2"
}
]
}
}
}
这个函数需要把所有的cartitems收集起来放到List<CartItem>里面
List<CartItem> GetAllCartItemsFromArbitraryJson(string jsonStr) {
JObject json = JObject.Parse(jsonStr);
// then what...?
}
所以List<CartItem> 将包含:
Id Qty
1 1
2 5
10 2
你会如何在 C# 中做到这一点?
【问题讨论】:
-
如果
JObject.Parse(jsonStr)成功,您可以通过json对象访问它的属性。但是如果cartItems被序列化为对象图的一部分,最方便的方法是反序列化整个图表,然后访问您想要的属性。 -
@YTAM:不,正如您在示例中看到的那样。 Amit:你是说我需要一个递归函数?我试过了,但我不明白如何循环 JToken 等
-
使用
SelectTokens和ToObject,像这样:var items = json.SelectTokens("..cartitems[*]").Select(t => t.ToObject<CartItem>()).ToList(); -
布莱恩,感谢您的“重复”,但它完全不同。我的问题的答案只有一行(dbc 很接近但不起作用)。如果可以重新打开,我会发布它。