Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用未知字段反序列化JSON对象_Json_Silverlight_Windows Phone 7_Datacontractjsonserializer - Fatal编程技术网

使用未知字段反序列化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")]

问题与类似,但我想使用内置的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;  }
我想我可以这样做:

{
"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扩展方法。这可能非常有效,而且非常短。