使用字符串数组反序列化JSON对象的异常

时间:2017-08-22 14:01:00

标签: c# asp.net json deserialization

问题:

我需要反序列化一个JSON对象。 但是,对象中的字符串数组似乎会导致异常,我无法弄清楚原因。

我使用json.parser.online.frjson2csharp等工具来确保我的JSON格式正确,并且我反序列化的类是正确的。在这两种情况下,工具都可以正常显示并且没有错误。但我仍然得到例外。

任何帮助都将不胜感激。

JSON:

{
"ID":123,
"Content":[ "{\"NewName\":\"asd\",\"Type\":\"2\"}]}" ],
"Notes":[""],
"Type":2,
"Subjects":"asd",
"Classes":"1",
"Name":"fdsgfd",
"Assign_Content":[
"[{\"Type\":\"text\",\"Text\":\"dfgfgs\"]"
],
"Creator":"example@example.com",
"isActive":"False",
"Editor":"example@example.com",
"CreatedDate":"2017-08-22T00:00:00",
"LastModifiedDate":"2017-08-22T00:00:00"
}

反序列化:

var task = JsonConvert.DeserializeObject<RootObject>(JSON);

类:

public class RootObject
{
    public int ID { get; set; }
    public List<string> Content { get; set; }
    public List<string> Notes { get; set; }
    public int Type { get; set; }
    public string Subjects { get; set; }
    public string Classes { get; set; }
    public string Name { get; set; }
    public List<string> Assign_Content { get; set; }
    public string Creator { get; set; }
    public string isActive { get; set; }
    public string Editor { get; set; }
    public string CreatedDate { get; set; }
    public string LastModifiedDate { get; set; }
}

异常:

  

发生了'Newtonsoft.Json.JsonReaderException'类型的异常   Newtonsoft.Json.dll但未在用户代码中处理

     

其他信息:在解析值后出现意外字符   遇到:N。路径'内容[0]',第1行,第23位。

修改

感谢kblok我这样做了:

JSON = "{\"ID\":123,\"Content\":[\"{\"NewName\":\"fdsgfd\",\"Type\":\"2\"}\"],\"Notes\":[\"\"],\"Type\":2,\"Subjects\":\"Tysk\",\"Classes\":\"3\",\"Name\":\"fdsgfd\",\"Assign_Content\":[\"[{\"Type\":\"text\",\"Text\":\"dfgfgs\"}]\"],\"Creator\":\"example@example.com\",\"isActive\":\"False\",\"Editor\":\"example@example.com\",\"CreatedDate\":\"2017-08-22T00:00:00\",\"LastModifiedDate\":\"2017-08-22T00:00:00\"}";
to
JSON= "{\"ID\":123,\"Content\":[\"{\\\"NewName\\\":\\\"fdsgfd\\\",\\\"Type\\\":\\\"2\\\"}\"],\"Notes\":[\"\"],\"Type\":2,\"Subjects\":\"Tysk\",\"Classes\":\"3\",\"Name\":\"fdsgfd\",\"Assign_Content\":[\"[{\\\"Type\\\":\\\"text\\\",\\\"Text\\\":\\\"dfgfgs\\\"}]\"],\"Creator\":\"example@example.com\",\"isActive\":\"False\",\"Editor\":\"example@example.com\",\"CreatedDate\":\"2017-08-22T00:00:00\",\"LastModifiedDate\":\"2017-08-22T00:00:00\"}";

它现在有效!

1 个答案:

答案 0 :(得分:1)

此字符串的结果:

\"Content\":[\"{\"NewName\":\"fdsgfd\",\"Type\":\"2\"}\"]

是:

"Content":["{"NewName":"fdsgfd","Type":"2"}"]

正如您所看到的,这是一个无效的JSON。因此,您需要转义反斜杠,以获得有效的JSON。而不是:

\"{\"NewName\":\"fdsgfd\",\"Type\":\"2\"}\"

应该是:

\"{\\\"NewName\\\":\\\"fdsgfd\\\",\\\"Type\\\":\\\"2\\\"}\"