Как десериализовать данные массива json в контроллере ASP.NET MVC - PullRequest
0 голосов
/ 31 октября 2018

Я успешно десериализовал простой объект json, но когда я отправляю массив контроллера json с помощью запроса POST на мой контроллер, он не работает. Вот мой код:

[HttpPost]
public string addWwarehouse([FromBody] warehouse warehouses)
{
      System.Diagnostics.Debug.WriteLine(warehouses[0].name);
      return "success";
}

Это рабочие данные JSON:

{
    "warehouses":
    {
        "name":"WarehouseA",
        "location":"locationA"
    }
}

Но когда я использую такой массив,

[{
    "warehouses":
    {
        "name":"WarehouseA",
        "location":"locationA"
    }
}]

Это не работает. Я также пытался использовать List<warehouse>, но все равно не повезло. Это мой warehouse класс:

public class warehouse { 
    public string name  { get; set; }
    public string location { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Добро пожаловать в StackOverflow.

Это не так, потому что ваша модель не List<warehouse>:

[{
    "warehouses":
    {
        "name":"WarehouseA",
        "location":"locationA"
    }
}]

Это массив объектов каждый со свойством, называемым «хранилищами», который содержит единственный объект типа warehouse. Вы можете вместо этого отправить массив складов:

[{
    "name":"WarehouseA",
    "location":"locationA"
}, {
    "name":"WarehouseB",
    "location":"locationB"
}]

И десериализовать его до List<warehouse>

P.S. Если у вас нет контроля над форматом json, ответ @Tiago Avila должен помочь.

Давайте проверим модель:

[{                                // [...] - array of some outer objs
    "warehouses":                 // with single property
    {                
        "name":"WarehouseA",      // inner obj that resides inside outer obj
        "location":"locationA"
    }
}]
0 голосов
/ 31 октября 2018

Так как ваш json, вам нужен такой класс:

public class Warehouses
{
    public string name { get; set; }
    public string location { get; set; }
}

public class RootObject
{
    public Warehouses warehouses { get; set; }
}

Тогда в вашем действии должно быть так:

public string addWwarehouse([FromBody] RootObject warehouses)

Я думаю, что это решит.

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