7

我将一个简单的 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' 类型。”

4

3 回答 3

28

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

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

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

或更改您的模型类:

class DataDC {
    public String name{ get; set; }    
}
于 2013-08-09T10:05:56.757 回答
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);
于 2013-08-09T10:04:23.873 回答
0

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

public class DataDC
{
    public string name{get; set;}
}
于 2013-08-09T10:02:14.043 回答