尝试解析JSON响应时出错 - 无法将'System.String'类型的对象转换为''

时间:2018-02-20 05:04:19

标签: c# asp.net json asp.net-mvc jsonparser

尝试解析JSON响应时出错

try
{
   var result = (new JavaScriptSerializer()).Deserialize<Rootobject>(jsonResponse);
}
catch(Exception ex){}

JSON字符串

"[{\"ID\":1,\"Code\":null,\"Name\":\"Black\"},{\"ID\":1,\"Code\":null,\"Name\":\"Red\"},{\"ID\":1,\"Code\":\"blx\",\"Name\":\"Blue\"}]"

附上屏幕截图以获取错误详细信息和精确的JSON字符串

enter image description here

我正在使用以下代码生成JSON

   public string JSONTest()
   {
        List<Color> colors = new List<Color>(); 
        colors.Add(new Color() { ID = 1, Name = "Black" }); 
        colors.Add(new Color() { ID = 1, Name = "Red" }); 
        colors.Add(new Color() { ID = 1, Name = "Blue", Code = "blx" }); 

        return JsonConvert.SerializeObject(colors); 
    }

3 个答案:

答案 0 :(得分:1)

试试这个

var result = (new JavaScriptSerializer()).Deserialize<List<Class1>>(jsonResponse);

您的结果将是Class1的列表

enter image description here

答案 1 :(得分:0)

嘿尝试使用以下内容:

 Class1 obj=new Class1();
 obj=serializer.Deserialize<Class1>(jsonResponse);

答案 2 :(得分:0)

JSON string反序列化需要 Root Key 才能完成反序列化过程

在您的情况下,此JSON不知道要反序列化的对象

  

您必须显示以在JSON字符串中反序列化类..

 public class Rootobject
 {         
    public Class1[] Property1 { get; set; }
 }


 public class Class1
 {
    public int ID { get; set; }

    public string Code { get; set; }

    public string Name { get; set; }
 }



     string jsonResponse = "{ \"Property1\" :  [{\"ID\":1,\"Code\":null,\"Name\":\"Black\"},{\"ID\":1,\"Code\":null,\"Name\":\"Red\"},{\"ID\":1,\"Code\":\"blx\",\"Name\":\"Blue\"}] }";

     var result = (new JavaScriptSerializer()).Deserialize<Rootobject>(jsonResponse);

使用根密钥生成JSON字符串

    public string JSONTest()
    {

        List<Class1> colors = new List<Class1>();
        colors.Add(new Class1() { ID = 1, Name = "Black" });
        colors.Add(new Class1() { ID = 1, Name = "Red" });
        colors.Add(new Class1() { ID = 1, Name = "Blue", Code = "blx" });

        return JsonConvert.SerializeObject(new Rootobject { Property1 = colors.ToArray() });
    }

Alternatifly,

DeserializeObject方法可以直接在object上反序列化。  如果您像这样使用它,您将不需要Root Key 但返回值将是一个对象..

 string jsonResponse = "[{\"ID\":1,\"Code\":null,\"Name\":\"Black\"},{\"ID\":1,\"Code\":null,\"Name\":\"Red\"},{\"ID\":1,\"Code\":\"blx\",\"Name\":\"Blue\"}]";
                object[] result = (object[])(new JavaScriptSerializer()).DeserializeObject(jsonResponse);