无法从JSON字符串构造Object

时间:2013-08-09 09:59:04

标签: c# json

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

“{\”name \“:\”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'。“

3 个答案:

答案 0 :(得分:23)

不应该像这样反序列化到你的班级:

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

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

或者更改您的模型类:

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

答案 1 :(得分:1)

您的Json字符串/对象与DataDC

的任何属性都不匹配

为了使其正常工作,您至少需要在类中拥有一个名为name的属性。 e.g。

public class DataDC
{

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

}

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

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

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

注意:您还可以使用以下代码进行反序列化;

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

答案 2 :(得分:0)

你无法反序列化它的原因是因为它看起来并不像你的类。你应该创建一个这样的类:

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