我无法将数据序列化为C#对象,因为对于同一组对象,JSON的结构不同。是否有某种函数可以让您搜索所有JSON属性及其子属性,以便返回您搜索的属性的值?
我通过API接收的数据示例(我试图返回属性值" propertyIamLookingFor"):
第一个例子
{"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"propertyIamLookingFor": 500,
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"alignment": "center"
}
}}
第二个例子
{"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"alignment": "center"
},
"propertyIamLookingFor": 32
}}
第三个例子
{"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"height": 500,
"propertyIamLookingFor": 11
}
}
}}
请注意,无论其位置如何,该属性始终具有相同的名称,因此我知道该属性的名称,并且我试图返回该值。
*如果有人想知道,这是我访问的一个糟糕的API,但没有选择不使用它。
答案 0 :(得分:1)
您可以使用JSONPath,它与XPath类似。
例如,要查找名为myProp
的所有属性,请使用JSONPath表达式
$..myProp
这是一个递归选择器,它将迭代所有属性和子道具等。
JSONPath内置于json.net库
再看看http://newtonsoft.com/json/help/html/QueryJsonSelectTokenJsonPath.htm但深入挖掘:)
答案 1 :(得分:0)
我没有设法在JSON.Net中找到一个函数来查找属性(无论JSON结构中的位置如何)并返回其值,但XmlDocument.GetElementsByTagName在XML中运行良好。所以我只是用JsonConvert.DeserializeXmlNode将JSON转换为XML,然后使用XmlDocument.GetElementsByTagName来查找我的属性。希望它可以帮助其他人解决同样的问题,并希望其他人发布更简单的方法来实现这一目标。
编辑: Charleh设法指出了JSON的方式,被接受为最佳答案