有没有办法从Json Response中提取所有数组,我不知道响应中每个数组的名称。
我基本上想要检测JSON中的数组对象的数量,然后分别访问每个对象。
我正在动态执行此操作,因此一个响应可能只包含“employees”数组,下一个响应可能包含两者。两个数组的结构将始终保持不变。
{
"employees": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"firstName": "Anna",
"lastName": "Smith"
},
{
"firstName": "Peter",
"lastName": "Jones"
}
],
"employers": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"firstName": "Anna",
"lastName": "Smith"
},
{
"firstName": "Peter",
"lastName": "Jones"
}
]
}
答案 0 :(得分:1)
有一种更简单的方法可以做到这一点,不涉及创建类。
您可以使用JObject / JArray(在您的情况下为jObject)并使用JObject.Parse,它将返回一个JObject。这是从解析的json生成的树结构。
可能比创建改变需求的类更舒服。还有一个类似xpath的语法来导航键。
更新
var so = "{\"employees\": [{\"firstName\": \"John\",\"lastName\": \"Doe\"},{\"firstName\": \"Anna\",\"lastName\": \"Smith\"},{\"firstName\": \"Peter\",\"lastName\": \"Jones\"}],\"employers\": [{\"firstName\": \"John\",\"lastName\": \"Doe\"},{\"firstName\": \"Anna\",\"lastName\": \"Smith\"},{\"firstName\": \"Peter\",\"lastName\": \"Jones\"}]}";
var parsed = JObject.Parse(so);
foreach (KeyValuePair<string, JToken> pair in parsed)
{
Debug.WriteLine(pair.Key);
foreach (JToken childObject in pair.Value)
{
Debug.WriteLine(childObject["firstName"]);
Debug.WriteLine(childObject["lastName"]);
}
}
// Or with Syntax i talked about:
foreach (var token in parsed.SelectTokens("employees/"))
{
Debug.WriteLine(token["firstName"]);
Debug.WriteLine(token["lastName"]);
}
答案 1 :(得分:0)
首先,根据你的陈述,由于两个数组的结构总是保持不变,我们可以将结构定义为List<FullName>
;鉴于此,
public class FullName
{
public string firstName { get; set; }
public string lastName { get; set; }
}
其次,由于您事先不知道响应中每个数组的名称,因此可以指定Dictionary
之类的数据结构。
Fyki,我在这里使用Json.Net。所以请不要忘记提前添加参考文献。
请参阅以下代码:
// 'json' is in enquoted string format
string json = "{\"employees\": [{\"firstName\": \"John\",\"lastName\": \"Doe\"},{\"firstName\": \"Anna\",\"lastName\": \"Smith\"},{\"firstName\": \"Peter\",\"lastName\": \"Jones\"}],\"employers\": [{\"firstName\": \"John\",\"lastName\": \"Doe\"},{\"firstName\": \"Anna\",\"lastName\": \"Smith\"},{\"firstName\": \"Peter\",\"lastName\": \"Jones\"}]}";
var dictCategoryList = JsonConvert.DeserializeObject<Dictionary<string, List<FullName>>>(json);
其中dictCategoryList
的类型为Dictionary<string, List<FullName>>
。
通过这种方式,您只需使用dictCategoryList.Count
来检测JSON中的数组对象的数量,然后单独访问每个对象,如下所示:
foreach (var category in dictCategoryList)
{
foreach (var item in category.Value)
{
Console.WriteLine(string.Format("First Name: {0}, Last Name: {1}", item.firstName, item.lastName));
}
}