【发布时间】:2016-07-19 09:08:47
【问题描述】:
如何使用 JSON.NET 从 JSON 中获取“myThings”数组,如下所示?
示例 1:
{
"z": {
"a": 1,
"b": 2
},
"something": {
"y": [1, 2],
"somethingElse": {
"1234": {
"foo": "bar",
"myThings": [{
"name": "bob",
"age": 3
}, {
"name": "bob",
"age": 3
}]
}
}
}
}
示例 2:
{
"z": {
"a": 1,
"b": 2
},
"something": {
"y": [1, 2],
"somethingElse": {
"7890": {
"foo": "bar"
}
}
}
}
我遇到困难的几件事:
- 其中一个属性名称是一个不可预测的数字(“1234”和“7890”)
- 有时“myThings”数组不存在 - 在这种情况下,我想要的是 null 或空数组/集合
另一个对您有帮助的考虑:我确实有一个静态类来表示 myThings 数组中的东西,所以我的理想返回值是IEnumerable<MyThing>
我的第一次尝试是使用JsonConvert.DeserializeObject<dynamic>(json),但我不知道如何处理我上面提到的问题。最后,我不需要整个 JSON 字符串的数据,只需要名为“myThings”的内部数组。
【问题讨论】:
-
“不可预测”是什么意思?
somethingElse是否只包含带有某个数字键的单个属性? -
“不可预测”是指作为对象名称的数字始终是不同的数字。在我的示例中,我指的是数字“1234”和“7890”。
-
对,我知道它可以改变,但是你对数据结构还有什么了解?你能不能总是做类似
something.somethingElse这样的事情,然后那将是里面唯一的关键? -
结构的唯一变化是数字的变化,
myThings对象有时不存在。结构的其余部分是可预测的。所以是的,something.somethingElse总是在那里,里面有一个以数字命名的项目。只是那个以数字命名的项目可能包含也可能不包含数组。