在使用jvascripSerializer().DeSerialize解析json时,我得到了这个"System.Collections.Generic.Dictionary 2[System.String,System.Object]" is not of type "MyCustomControl.Result" and cannot be used in this generic collection错误,我的类型如下所示
class templateResponse
{
public String multicast_id;
public String success;
public String failure;
public String canonical_ids;
public Results results
}
public class Result
{
public String message_id;
public String registration_id;
public String error;
}
Public class Results : ObservableCollection<Result>
{
}我的json数据如下所示:
{"\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}"这是我的json数据解析代码。
templateResponse result = new JavaScriptSerializer().Deserialize<templateResponse>(json);请帮我克服这个错误,告诉我这里出了什么问题?
谢谢,
卡西克。
发布于 2013-12-12 18:13:49
json数据包含整型值,但是您的c#类包含字符串值。
尝试将它们更改为正确的类型。
我不确定JavaScriptSerializer有多严格,但这可能是一个问题。
还可以尝试将结果设置为列表,这样可能会更好,这会导致json中的结果是一个对象数组,而不是对象的键值集合。
像这样:
class templateResponse
{
public int multicast_id;
public int success;
public int failure;
public int canonical_ids;
public List<Result> results
}
public class Result
{
public string message_id;
public string registration_id;
public string error;
}发布于 2013-12-12 18:16:07
我尝试使用Newtonsoft.Json对JSON字符串进行反序列化,并成功地给出了以下输出
string json = "{\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}";
var expectedresult = JsonConvert.DeserializeObject(json);输出:
{
"multicast_id":7400896764380883211,
"success":1,
"failure":0,
"canonical_ids":0,
"results":[
{
"message_id":"0:1351777805148960%39895cf0f9fd7ecd"
}
]
}如需更多信息,请访问http://james.newtonking.com/json。
发布于 2016-11-29 18:53:10
它失败的原因是因为您公开了结果集合。内置的序列化程序不能处理从泛型列表继承的属性。不要问我为什么,但是我在某处读到你不应该公开从List继承的类,这不是为了这个目的。
我做了一个(相当难看的)变通方法,我实现了一个自定义的JavaScriptConverter来处理我的对象。基本上,您从System.Web.Script.Serialization.JavaScriptConverter,继承,实现抽象类,然后将其添加到您的web.config中:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization>
<converters>
<add name="MyJsonConverter" type="corp.com.MyJsonConverter" />
</converters>
</jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>https://stackoverflow.com/questions/20540424
复制相似问题