我正在学习 C#,我正在尝试解析 json/xml 响应并检查每个键和值对。对于 xml,我正在转换为 json,所以我只有一个函数/脚本可以处理这两种情况。我的问题是我正在处理各种不相似的 json 响应,并且某些 json 响应中可能有数组。我曾尝试访问 json 对象的“计数”作为检查数组的一种方式。
注意:响应会有所不同。此示例适用于产品 > 产品 > 名称、数量和类别。下一个响应将发生变化,可以是 Country > State > Cities 等。我不能依赖于创建类,因为所有的响应都会有所不同。另外,我正在努力使其自动化,因此它应该能够处理任何扔给它的东西。
我正在使用的示例 Json:
{
"products": {
"product": [
{
"name": "Dom quixote de La Mancha",
"quantity": "12",
"category": "Book"
},
{
"name": "Hamlet",
"quantity": "3",
"category": "Book"
},
{
"name": "War and Peace",
"quantity": "7",
"category": "Book"
},
{
"name": "Moby Dick",
"quantity": "14",
"category": "Book"
},
{
"name": "Forrest Gump",
"quantity": "16",
"category": "DVD"
}
]
}
我访问计数、名称和值的方式如下:
dynamic dyn = JsonConvert.DeserializeObject<dynamic>(jsonText);
foreach (JProperty property in dyn.Properties())
{
string propname = property.Name;
var propvalue = property.Value;
int count = property.Count;
}
有没有办法不用像 int count = dyn.Count 这样的 foreach 循环来访问这些?我从中得到的只是 null 而不是实际值。
对于上面的例子,我的最终结果是这样的: 此响应包含产品> 产品> 5 x(名称、数量、类别)
对象的 QuickWatch: QuickWatch for dyn object
答案 0 :(得分:0)
尝试将您的 JSON 反序列化为 JObject,如下所示:
var jObject = JsonConvert.DeserializeObject<JObject>(jsonText);