JSON字符串反序列化为对象的数组列表

JSON字符串反序列化为对象的数组列表

问题描述:

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

Please help! Getting this error on Deserializing:

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

Cannot convert object of type 'System.String' to type 'System.Collections.Generic.List'

来自客户端的JSON字符串:

JSON string from client:

"\" [{{\\"id \\":\\"18_0_2_0 \\",\\"ans \\":\\您可以免费输入 文字代替 * \\},{\\" id \\:\\" 23_1_3_1 \\,\\" ans \\:\\"刷新按钮\\},{ \\"id \\":\\"11_2_1_2_2 \\",\\"ans \\":\\"False \\"}] \"

"\"[{\\"id\\":\\"18_0_2_0\\",\\"ans\\":\\"You can enter free text in place of *\\"},{\\"id\\":\\"23_1_3_1\\",\\"ans\\":\\"The refresh button\\"},{\\"id\\":\\"11_2_1_2\\",\\"ans\\":\\"False\\"}]\""

未转义(请参阅评论):

Unescaped (see comments):

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

[{"id":"18_0_2_0","ans":"You can enter free text in place of *"},{"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; }
}

您的原始json字符串(在aKzenT进行编辑之前)被两次转义,我使用var str2 = Regex.Unescape(str);来获取实际的字符串.

Your original json string(before aKzenT's edit) was double escaped and I used var str2 = Regex.Unescape(str); to get the actual string .

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

}

并且不需要AnswerList

现在您的代码可以工作了

Now your code can work

JavaScriptSerializer serializer = new JavaScriptSerializer();
List<RawAnswer> ListAnswers = serializer.Deserialize<List<RawAnswer>>(str);