【发布时间】:2017-02-19 02:48:05
【问题描述】:
我将 JSON 反序列化为已知类型或 Dictionary 对象没有问题,但是如果我不知道输入将是什么情况呢?具体来说,我指的是接收代表一组平面或嵌套键值对的 JSON 字符串:
{
foo: 'bar',
baz: 42
}
或
{
foo:
{
bar: 42,
baz: ['foo', 'bar', 'baz']
}
}
但是如果输入不是键值对,而是一个数组,或者一个包含其他嵌套对象(包括数组)的对象数组,该怎么办?
[
{ foo: 'bar', baz: [ 1, 2, 3 ] },
{ foo: 'baz', bar: [ 4, 5, 6 ] }
]
我的目标是拥有一个可以反序列化上述任何内容的类,然后迭代它的每个成员。输入可以是任何结构,所以我不能假设数据会匹配我已经定义的任何类型。
我还没有找到方法来做到这一点。有人有什么指导吗?
编辑:
JToken 似乎很容易。解析 JSON 字符串;一个有用的下一步是迭代其成员并分别处理 JArray 和 JObject。
【问题讨论】:
-
您是否考虑过反序列化为动态? stackoverflow.com/questions/4535840/…
-
是的,当输入是一个没有键的数组时,我似乎无法让它工作。
-
没有键的数组是什么意思?
-
您所描述的是LINQ-to-JSON API (JTokens)。使用
JToken token = JToken.Parse(json)。或者,如果您更喜欢普通的旧 .Net 对象,请参阅 How do I use JSON.NET to deserialize into nested/recursive Dictionary and List? -
@joelc 我添加了一个答案,展示了如何迭代 JToken 的成员。