我从一个看起来像这样的网络服务收到JSON:
{
"RESULTS": {
"1220": {
"DDR_TYPE_ID": 7,
"DDR_ID": 5199,
"DDR_NAME": "Mesa Building"
},
"5455": {
"DDR_TYPE_ID": 7,
"DDR_ID": 417,
"DDR_NAME": "Scottsdale Building"
},
"1462": {
"DDR_TYPE_ID": 12,
"DDR_ID": 3324,
"DDR_NAME": "Gentry Building"
}
}
}
我无法用我常用的方法进行序列化,因为这不是一个相同对象的数组,这要归功于奇数编号的键。
我需要的是DDR_ID
值的列表。
有没有办法使用Linq to JSON从这个JSON中获取这些值?或者有更好的方法吗?
答案 0 :(得分:5)
"奇数编号的键" (或任何其他动态键)可以通过反序列化到字典来处理。所以,例如,如果你有这样一个类:
public class MyJSON
{
public Dictionary<int,ResultItem> Results { get; set; }
}
public class ResultItem
{
public int DDR_ID { get; set; }
}
然后,在反序列化之后,您应该能够通过以下方式获取您的身份:
var myObj = JsonConvert.DeserializeObject<MyJSON>(jsonString); // using JSON.Net
var ids = myObj.Results.Select(p => p.Value.DDR_ID);
这里是fiddle
答案 1 :(得分:2)
如果您想避免使用其他对象:
using System;
using System.Linq;
using Newtonsoft.Json.Linq;
var jObject = JObject.Parse(json)["RESULTS"];
var result = jObject.Select(x => x.First["DDR_ID"]).Values<int>();
答案 2 :(得分:1)
有没有办法使用Linq to JSON从中获取这些值 JSON?
使用Linq to JSON,你可以获得这样的值而不需要其他对象
var obj = (JObject) JObject.Parse(json)["RESULTS"];
var ids = obj.Properties().Select(p => (int)p.Value["DDR_ID"]);