如何反序列化 Json 对象 - C#
How to Deserialize Json Object - C#
Web 服务 returns JSON 对象自爆:
JsonString = "{"d":"[{\"sname\":\"S1\",\"region\":\"R1\",\"name\":\"Q1\"},{\"sname\":\"S2\",\"region\":\"R2\",\"name\":\"Q2\"}]"}"
我试图通过这样做反序列化:
定义对象
public class RootResponseClass
{
public ResponseParametersClass[] d { get; set; }
}
public class ResponseParametersClass
{
public string sname { get; set; }
public string region { get; set; }
public string name { get; set; }
}
编写反序列化方法
JavaScriptSerializer ser2 = new JavaScriptSerializer();
RootResponseClass obj = new RootResponseClass();
obj = ser2.Deserialize<RootResponseClass>(JsonString);
但是它给出了错误 "Cannot convert object of type 'System.String' to type 'NAS.Helpers.ResponseParametersClass[]",所以我该怎么做!
解决方案
public class RootResponseClass
{
public string d { get; set; }
}
反序列化方法:
JavaScriptSerializer ser2 = new JavaScriptSerializer();
RootResponseClass obj = new RootResponseClass();
obj = ser2.Deserialize<RootResponseClass>(JsonString);
List<ResponseParametersClass> obj2 = new List<ResponseParametersClass>();
obj2 = ser2.Deserialize<List<ResponseParametersClass>>(obj.d.ToString());
您可以使用包 using Newtonsoft.Json;
反序列化 JSON
例子
JsonString = "{"d":"[{\"sname\":\"S1\",\"region\":\"R1\",\"name\":\"Q1\"},{\"sname\":\"S2\",\"region\":\"R2\",\"name\":\"Q2\"}]"}";
var foo = JsonConvert.DeserializeObject<RootResponseClass>(JsonString);
foo 是您的反序列化对象。
编辑
作为额外信息,为什么初始方法不起作用是因为您的数组以引号开头,因此它被识别为字符串。在 "{"d":
之后应该只是 []
而不是 "[]"
感谢 Dnomyar96 指出了这一点。
您的 Json 字符串似乎包含另一个 Json 字符串。因此,为了反序列化它,您需要像现在一样反序列化,但将 ResponseParametersClass
更改为 string
.
然后你需要反序列化你刚得到的字符串(作为 List<ResponseParametersClass>
)。因此,在这种情况下,您需要分两个单独的步骤进行反序列化。
Web 服务 returns JSON 对象自爆:
JsonString = "{"d":"[{\"sname\":\"S1\",\"region\":\"R1\",\"name\":\"Q1\"},{\"sname\":\"S2\",\"region\":\"R2\",\"name\":\"Q2\"}]"}"
我试图通过这样做反序列化:
定义对象
public class RootResponseClass { public ResponseParametersClass[] d { get; set; } } public class ResponseParametersClass { public string sname { get; set; } public string region { get; set; } public string name { get; set; } }
编写反序列化方法
JavaScriptSerializer ser2 = new JavaScriptSerializer(); RootResponseClass obj = new RootResponseClass(); obj = ser2.Deserialize<RootResponseClass>(JsonString);
但是它给出了错误 "Cannot convert object of type 'System.String' to type 'NAS.Helpers.ResponseParametersClass[]",所以我该怎么做!
解决方案
public class RootResponseClass
{
public string d { get; set; }
}
反序列化方法:
JavaScriptSerializer ser2 = new JavaScriptSerializer();
RootResponseClass obj = new RootResponseClass();
obj = ser2.Deserialize<RootResponseClass>(JsonString);
List<ResponseParametersClass> obj2 = new List<ResponseParametersClass>();
obj2 = ser2.Deserialize<List<ResponseParametersClass>>(obj.d.ToString());
您可以使用包 using Newtonsoft.Json;
反序列化 JSON
例子
JsonString = "{"d":"[{\"sname\":\"S1\",\"region\":\"R1\",\"name\":\"Q1\"},{\"sname\":\"S2\",\"region\":\"R2\",\"name\":\"Q2\"}]"}";
var foo = JsonConvert.DeserializeObject<RootResponseClass>(JsonString);
foo 是您的反序列化对象。
编辑
作为额外信息,为什么初始方法不起作用是因为您的数组以引号开头,因此它被识别为字符串。在 "{"d":
之后应该只是 []
而不是 "[]"
感谢 Dnomyar96 指出了这一点。
您的 Json 字符串似乎包含另一个 Json 字符串。因此,为了反序列化它,您需要像现在一样反序列化,但将 ResponseParametersClass
更改为 string
.
然后你需要反序列化你刚得到的字符串(作为 List<ResponseParametersClass>
)。因此,在这种情况下,您需要分两个单独的步骤进行反序列化。