使用未知字段反序列化JSON对象
问题与类似,但我想使用内置的DataContractJsonSerializer 所以我有这样的JSON数据:使用未知字段反序列化JSON对象,json,silverlight,windows-phone-7,datacontractjsonserializer,Json,Silverlight,Windows Phone 7,Datacontractjsonserializer,问题与类似,但我想使用内置的DataContractJsonSerializer 所以我有这样的JSON数据: { "known1": "foo", "known2": "bar", "more":{ "unknown12345": { "text": "foo", "label": "bar"}, "unknown67890": { "text": "foo","label":"bar"} } } [DataMember(Name = "known1")]
{
"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; }
我想我可以这样做:
{
"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; }
但是在JSON.Net中工作的东西在本机JSON解析器中似乎并不那么容易。在ReadObject()中,我得到一个ArgumentException,可能是因为字典
你知道什么是最好的解决方案吗
提前感谢。DataContractJsonSerializer不支持从JSON中的对象符号反序列化
字典。它只支持将字典视为数组。因此,反序列化为您定义的类型所需的JSON应该如下所示:-
{
"known1": "foo",
"known2": "bar",
"more":[{ "Key": "unknown12345", "Value": { "text": "foo", "label": "bar"} },
{ "Key": "unknown67890", "Value": { "text": "foo","label":"bar"} }
]
}
如果传入JSON的模式无法更改,那么您将无法使用DataContractJsonSerializer
该DataContractJsonSerializer
不支持从JSON中的对象符号反序列化字典
。它只支持将字典视为数组。因此,反序列化为您定义的类型所需的JSON应该如下所示:-
{
"known1": "foo",
"known2": "bar",
"more":[{ "Key": "unknown12345", "Value": { "text": "foo", "label": "bar"} },
{ "Key": "unknown67890", "Value": { "text": "foo","label":"bar"} }
]
}
如果传入JSON的模式无法更改,那么您将无法使用DataContractJsonSerializer
您可以发布TwoStringMembersClass的定义吗。您可能还想查看它是否与Dictionary一起工作。@calum TwoStringMembersClass现在提供了。……同时Dictionary引发了相同的异常:-(您可以发布TwoStringMembersClass的定义。您可能还想查看它是否与Dictionary一起工作。@calum TwoStringMembersClass现在提供了。……Dictionary也引发了相同的异常:-(我也很担心。无论如何,谢谢。也有可能在内置xml/json解析器的支持下自行构建解析器,但这更令人鼓舞。请参阅此博客文章中的详细信息:@sav:如果我尝试使用我的一个代码进行序列化,我会使用Silverlight特有的System.json
命名空间以及LINQ扩展方法。这可能非常有效,而且非常短。我也很担心。无论如何,谢谢。也有可能在内置xml/json解析器的支持下自己构建解析器,但这更令人鼓舞。请参阅此博客文章中的详细信息:@sav:如果我尝试用我的一个代码进行序列化,我会告诉我们e特定于Silverlight的System.Json
名称空间以及LINQ扩展方法。这可能非常有效,而且非常短。