2

请帮忙!在反序列化时出现此错误:

无法将“System.String”类型的对象转换为“System.Collections.Generic.List”类型

来自客户端的 JSON 字符串:

"\"[{\\"id\\":\\"18_0_2_0\\",\\"ans\\":\\"您可以输入自由文本代替 * \\"},{\\" id\\":\\"23_1_3_1\\",\\"ans\\":\\"刷新按钮\\"},{\\"id\\":\\"11_2_1_2\\",\ \"ans\\":\\"假\\"}]\""

编辑:未转义(见评论):

[{"id":"18_0_2_0","ans":"您可以输入自由文本代替* "},{"id":"11_2_1_2","ans":"False"}]

JavaScriptSerializer serializer = new JavaScriptSerializer();
List<RawAnswer> ListAnswers = serializer.Deserialize<List<RawAnswer>>(str);
 [Serializable]
public class RawAnswer
{       
    public string QuestionID { get; set; }
    public string Answer { get; set; }

    public RawAnswer() { }

}

public class AnswerList
{
    public List<RawAnswer> RawAnswer { get; set; }
}
4

2 回答 2

9

您的原始 json 字符串(在 aKzenT 编辑之前)被双重转义,我曾经var str2 = Regex.Unescape(str);得到实际的字符串。

public class RawAnswer
{
     public string id { get; set; }
     public string ans { get; set; }

}

而且不需要AnswerList

现在你的代码可以工作了

JavaScriptSerializer serializer = new JavaScriptSerializer();
List<RawAnswer> ListAnswers = serializer.Deserialize<List<RawAnswer>>(str);
于 2012-10-02T21:19:29.670 回答
2

您从客户端收到的 JSON 字符串本身就是一个包含您要查找的实际 JSON 字符串的字符串。修复客户端以向您发送正确的字符串,或者首先将此结果反序列化为 a String,然后将其反序列化为List<RawAnswer>.

于 2012-10-02T21:13:24.990 回答