【发布时间】:2018-10-10 11:12:11
【问题描述】:
Web 服务将 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);
但它给出了错误“无法将'System.String'类型的对象转换为'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());
【问题讨论】:
-
Json 中的 d 不包含数组,而是字符串。如果它是一个数组,它会像 [ 而不是 "[ 开始。所以看起来 Json 包含另一个 Json 字符串。
-
我推荐使用 Newtonsoft.Json
-
@Dnomyar96 感谢您的评论帮助我找到答案。
-
我厌倦了这两个,另一个答案也有效,但使用另一种方法,但就像你说的问题不在于方法,它在于我如何处理 json 字符串,所以我做了你在评论中推荐的,效果很好。
标签: c# json deserialization javascriptserializer