2017-02-21 7 views
1

Я получаю следующий JSON из веб-API, в котором перечислены ошибки, обнаруженные в POST. В ModelState может быть более одной пары ключ-значение, в зависимости от того, сколько ошибок найдено. Единственная проблема заключается в том, что вокруг значений есть квадратные скобки. Поэтому, когда я deserialize с JSON.net, есть ошибка Unexpected token.Deserialize JSON с квадратными скобками вокруг строковых значений

Мое решение теперь состоит в том, чтобы выполнить поиск и замену для этих скобок, а затем десериализовать, что действительно работает. Но есть ли лучшее решение?

Мой класс

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("]", "")); 
+0

[подробнее] (http://stackoverflow.com/questions/36688321/what-is-the-purose-of-using-square-brackets-in-json) – stuartd

ответ

3

вы хотите модель Государство быть Dictionary<string, List<string>> вместо Dictionary<string, string>

т.е.

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

принял ваше ответьте как правильный, поскольку все вы почти идентичны, но ваш был первым. – VDWWD

2

Чтобы выполнить свою задачу, изменить класс ошибки следующим образом:

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

просто изменить свою модель к следующему

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

и десериализация будет l ООК как следующий

Error error = JsonConvert.DeserializeObject<Error>(jsonString); 
Смежные вопросы