C # - десериализовать JSON с индексным массивом - PullRequest
0 голосов
/ 28 июня 2018

В ответ я получаю JSON

{
  "message": "The request is invalid.",
  "modelState": {
    "users[0].FirstName": [
      "First name is required",
      "First name should contains at least one letter"
    ],
    "users[1].FirstName": [
      "First name is required",
      "First name should contains at least one letter"
    ]
  }
}

Как я могу десериализовать с помощью индекса? Я использую JsonConvert.DeserializeObject и хочу создать объект POJO для этого ответа

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я выбираю словарь. Это работает, но это решение вашей работы со строкой, а не POJO. Но можно привести строку к POJO

public class UserErrorMessage
{
    public string Message { get; set; }

    public Dictionary<string, string[]> ModelState { get; set; }
}
0 голосов
/ 28 июня 2018

Вам нужны классы отображения для десериализации вашего JSON. Для хитрого ключа users[0].FirstName, который выглядит как свойство другого класса, вы можете использовать атрибут JsonProperty.

static void Main(string[] args)
{
    string jsonStr = "{\"message\": \"The request is invalid.\", \"modelState\": { \"users[0].FirstName\": [\"First name is required\", \"First name should contains at least one letter\" ],\"users[1].FirstName\": [\"First name is required\", \"First name should contains at least one letter\" ]}}";

    var obj = JsonConvert.DeserializeObject<Message>(jsonStr);

    // Output
    Console.WriteLine("message: " + obj.message);
    Console.WriteLine("modelState:");
    Console.WriteLine("users[0].FirstName: ");
    foreach (var item in obj.modelState.Obj1)
        Console.WriteLine(item);
    Console.WriteLine("users[1].FirstName: ");
    foreach (var item in obj.modelState.Obj2)
        Console.WriteLine(item);

    Console.Read();
}

class Message
{
    public string message { get; set; }
    public ModelState modelState { get; set; }
}

class ModelState
{
    [JsonProperty("users[0].FirstName")]
    public string[] Obj1 { get; set; }

    [JsonProperty("users[1].FirstName")]
    public string[] Obj2 { get; set; }
}

Выход: message: The request is invalid. modelState: users[0].FirstName: First name is required First name should contains at least one letter users[1].FirstName: The first name is required First name should contains at least one letter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...