【问题标题】:Deserialize JSON with square brackets around string values在字符串值周围使用方括号反序列化 JSON
【发布时间】:2017-02-21 14:32:00
【问题描述】:

我从 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("]", ""));

【问题讨论】:

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


【解决方案1】:

您会希望 ModelState 成为 Dictionary&lt;string, List&lt;string&gt;&gt; 而不是 Dictionary&lt;string, string&gt;

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

【讨论】:

  • 接受你的答案是正确的,因为你几乎都是一样的,但你是第一个。
【解决方案2】:

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

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

反序列化将如下所示

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-30
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 2013-01-18
      • 2013-05-07
      • 2018-04-28
      • 1970-01-01
      相关资源
      最近更新 更多