问题类似于Deserializing JSON with unknown fields,但我想使用内置的DataContractJsonSerializer。
所以我有这样的JSON数据:
{
"known1": "foo",
"known2": "bar",
"more":{ "unknown12345": { "text": "foo", "label": "bar"},
"unknown67890": { "text": "foo","label":"bar"}
}
}
我以为我可以做那样的数据收集:
[DataMember(Name = "known1")]
public string K1 { get; set; }
[DataMember(Name = "known2")]
public string K2 { get; set; }
[DataMember(Name = "more")]
public Dictionary<string,TwoStringMembersClass> More { get; set; }
TwoStringMembersClass就是这样:
[DataContract(Name = "TwoStringMembersClass ")]
public class TwoStringMembersClass
{
[DataMember(Name = "text")]
public string Text { get; set; }
[DataMember(Name = "label")]
public string Label { get; set; }
}
但是,使用本机JSON解析器似乎在JSON.Net中起作用似乎并不那么容易。在ReadObject()中,我得到一个ArgumentException,可能是因为Dictionary。
知道如何使这项工作成为最佳解决方案吗?
提前致谢。
答案 0 :(得分:1)
DataContractJsonSerializer
不支持从JSON中的对象表示法反序列化Dictionary<TKey, TValue>
。它仅支持将字典视为数组。因此,反序列化到您定义的类型所需的JSON应如下所示: -
{
"known1": "foo",
"known2": "bar",
"more":[{ "Key": "unknown12345", "Value": { "text": "foo", "label": "bar"} },
{ "Key": "unknown67890", "Value": { "text": "foo","label":"bar"} }
]
}
如果传入的JSON的架构无法更改,那么您将无法使用DataContractJsonSerializer
。