使用方括号围绕字符串值反序列化JSON

时间:2017-02-21 14:32:00

标签: c# asp.net .net json json.net

我从Web API收到以下JSON,其中列出了在POST中发现的错误。 ModelState中可以有多个键值对,具体取决于发现的错误数。唯一的问题是值周围有方括号。因此,当我使用JSON.net反序列化时,会出现Unexpected token错误。

我现在的解决方案是搜索并替换这些括号,然后反序列化,这确实有效。但是有更好的解决方案吗?

我的班级

public class Error
{
    public string Message { get; set; }
    public Dictionary<string, string> ModelState { get; set; }
}

JSON

{
    "Message": "The request is invalid.",
    "ModelState": {
        "member.Gender": ["An error has occurred."],
        "member.MemberID": ["The MemberID field is required."],
        "member.BoardMemberID": ["The BoardMemberID field is required."],
    }
}

我现在如何反序列化

Error error = JsonConvert.DeserializeObject<Error>(jsonString.Replace("[", "").Replace("]", ""));

3 个答案:

答案 0 :(得分:3)

您希望ModelState为Dictionary<string, List<string>>而不是Dictionary<string, string>

public class Error
{
    public string Message { get; set; }
    public Dictionary<string, List<string>> ModelState { get; set; }
}

答案 1 :(得分:3)

只需将您的模型更改为以下

public class Error
    {
        public string Message { get; set; }
        public Dictionary<string, string[]> ModelState { get; set; }
    }

,反序列化将如下所示

Error error = JsonConvert.DeserializeObject<Error>(jsonString);  

答案 2 :(得分:2)

要完成任务,请按以下方式修改Error类:

public class Error
{
    public string Message { get; set; }
    public Dictionary<string, List<string>> ModelState { get; set; }
}