【问题标题】:Unable to construct Object from JSON string无法从 JSON 字符串构造对象
【发布时间】:2013-08-09 09:59:03
【问题描述】:

我正在将一个简单的 JSON 字符串从我的 C# 客户端传递到我的 webservice 。以下是我发送的字符串

"{ \"名称\":\"S1\" }"

在服务端我使用以下代码

class DataDC
{

    public String attr { get; set; }
    public String attrVal { get; set; }

}

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
DataDC dc = (DataDC)json_serializer.DeserializeObject(str);

我收到以下错误

“无法转换类型的对象 'System.Collections.Generic.Dictionary`2[System.String,System.Object]' 输入“DataDC”。”

【问题讨论】:

  • 你应该将你的类属性命名为 json 中的属性
  • 你的 json 反序列化器应该如何知道 DataDC 对象以及如何映射它?

标签: c# json


【解决方案1】:

反序列化到你的类不应该是这样吗:

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
DataDC dc = json_serializer.Deserialize<DataDC>(str);

另一件事是您的模型类中没有 Name 参数,因此不会将任何内容传递给它。 你的 JSON 应该是这样的: "{ \"attr\":\"某个值\",\"attrVal\":\"某个值\" }"

或者改变你的模型类:

class DataDC {
    public String name{ get; set; }    
}

【讨论】:

  • @sameer 您能否提及这两个建议中的哪一个对您有帮助(或两者都有)?
【解决方案2】:

您的 Json 字符串/对象与 DataDC 的任何属性都不匹配

为了使它起作用,您至少需要在类中有一个名为 name 的属性。例如

public class DataDC
{

    public string name { get; set; }
    public string attr { get; set; }
    public string attrVal { get; set; }

}

这样你可能会得到一个匹配的属性。

使用现有的类,您需要以下 Json 字符串;

"{ \"attr\":\"S1\", \"attrVal\":\"V1\" }"

注意:也可以使用下面的代码进行反序列化;

DataDC dc = json_serializer.Deserialize<DataDC>(str);

【讨论】:

    【解决方案3】:

    你不能反序列化它的原因是它看起来一点也不像你的类。你应该像这样创建一个类:

    public class DataDC
    {
        public string name{get; set;}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      相关资源
      最近更新 更多