首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中使用DeSerialization解析json

在C#中使用DeSerialization解析json
EN

Stack Overflow用户
提问于 2013-12-12 18:05:52
回答 3查看 373关注 0票数 1

在使用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错误,我的类型如下所示

代码语言:javascript
复制
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数据如下所示:

代码语言:javascript
复制
{"\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}"

这是我的json数据解析代码。

代码语言:javascript
复制
templateResponse result = new JavaScriptSerializer().Deserialize<templateResponse>(json);

请帮我克服这个错误,告诉我这里出了什么问题?

谢谢,

卡西克。

EN

回答 3

Stack Overflow用户

发布于 2013-12-12 18:13:49

json数据包含整型值,但是您的c#类包含字符串值。

尝试将它们更改为正确的类型。

我不确定JavaScriptSerializer有多严格,但这可能是一个问题。

还可以尝试将结果设置为列表,这样可能会更好,这会导致json中的结果是一个对象数组,而不是对象的键值集合。

像这样:

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2013-12-12 18:16:07

我尝试使用Newtonsoft.Json对JSON字符串进行反序列化,并成功地给出了以下输出

代码语言:javascript
复制
  string json = "{\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}";
  var expectedresult = JsonConvert.DeserializeObject(json);

输出:

代码语言:javascript
复制
{
   "multicast_id":7400896764380883211,
   "success":1,
   "failure":0,
   "canonical_ids":0,
   "results":[
      {
         "message_id":"0:1351777805148960%39895cf0f9fd7ecd"
      }
   ]
}

如需更多信息,请访问http://james.newtonking.com/json

票数 0
EN

Stack Overflow用户

发布于 2016-11-29 18:53:10

它失败的原因是因为您公开了结果集合。内置的序列化程序不能处理从泛型列表继承的属性。不要问我为什么,但是我在某处读到你不应该公开从List继承的类,这不是为了这个目的。

我做了一个(相当难看的)变通方法,我实现了一个自定义的JavaScriptConverter来处理我的对象。基本上,您从System.Web.Script.Serialization.JavaScriptConverter,继承,实现抽象类,然后将其添加到您的web.config中:

代码语言:javascript
复制
<system.web.extensions>
    <scripting>
        <webServices>
            <jsonSerialization>
                <converters>
                    <add name="MyJsonConverter" type="corp.com.MyJsonConverter" />
                </converters>
            </jsonSerialization>
        </webServices>
    </scripting>
</system.web.extensions>

以下是官方文档的链接:https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptconverter(v=vs.100).aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20540424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档