i不能将数据序列化为c#对象,因为同一集对象的JSON结构不相同。是否有某种功能可以让您搜索所有JSON属性及其子属性,以返回您搜索的属性的值?
我通过API收到的数据的示例(我正在尝试返回属性" property amlookingfor"的价值(:
第一个示例
{"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,但别无选择。
您可以为此使用JSONPATH,类似于XPATH。
例如,查找所有称为myProp
的属性,请使用JSONPATH表达式
$..myProp
这是一个递归选择器,它将迭代所有属性和儿童道具等。
JSONPATH内置在JSON.NET库中
再次查看http://newtonsoft.com/json/help/html/queryjsonselecttokenjsonpath.htm,但更深入:(
我没有设法在json.net中找到一个函数来查找属性(无论json结构中的位置如何(并返回其值,但是xmldocument.getElements.getElementsBytaGname与xml效果很好。因此,我只是将JSON转换为jsonconvert.deserializexmlnode,然后使用xmldocument.getElementsbytagname查找我的属性。希望它能帮助其他所有人解决同一问题,并希望其他人发布一种实现这一目标的更简单的方法。
编辑: Charleh设法指出了JSON的道路,被接受为最佳答案