复杂对象的json数组在发布时始终为null

时间:2018-07-15 16:01:21

标签: arrays json post .net-core asp.net-core-webapi

我的项目:ASP.Net Web Api,Dot.Net Core 2.0,VS 2017。

这是我的模特

public class AddressData
{
    public string id { get; set; }
    public string address { get; set; }
    public int number { get; set; }
    public string complement { get; set; }
}

这是我的控制人

[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpPost]
    public IActionResult Post([FromBody] List<AddressData> value)
    {
        if (value == null)
            return BadRequest();

        return Ok();
    }

}

这是我的杰森:

{
"value" : [
    {
        "id" : "08921619810",
        "address" : "ilicinia",
        "number" : 154,
        "complement": ""
    },
    {
        "id" : "12345678910",
        "address" : "candido figueiredo",
        "number" : 581,
        "complement": "ap 15"
    }
]
}

请求参数“值”始终为NULL。如果我将控制器方法签名更改为

    [HttpPost]
    public IActionResult Post([FromBody] AddressData value)

删除并使用以下Json

{
"id" : "08921619810",
"address" : "ilicinia",
"number" : 154,
"complement": ""
}

一切正常。如果我更改为[FromForm],则可以使用,但是对象列表不包含任何元素(Count属性= 0)。

我使用的是Postman,配置为在“ application / json”中发送内容类型的POST消息。

有人可以告诉我我在哪里做错了吗?

1 个答案:

答案 0 :(得分:3)

您要在JSON中发送的对象与您要反序列化到的C#POCO对象之间不匹配。您要发送的JSON不是AddressData列表,而是一个看起来像C#的对象:

using System;
using System.Collections.Generic;

namespace Yournamespace
{
    public class AddressDataList
    {
        public List<AddressData> value { get; set; }
    }

    public class AddressData
    {
        public string id { get; set; }
        public string address { get; set; }
        public int number { get; set; }
        public string complement { get; set; }
    }
}

如果您将控制器更改为接受AddressDataList,则它现在应该正确反序列化:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    [HttpPost]
    public IActionResult Post([FromBody] AddressDataList addressDataList)
    {
        if (addressDataList == null)
            return BadRequest();

        return Ok();
    }

}