复杂对象的json数组在post中始终为null



我的项目: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"
}
]
}

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

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

移除并使用以下Json

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

一切都很好。如果我更改为[FromForm],它可以工作,但对象列表不包含任何元素(Count属性=0(。

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

有人能告诉我哪里做错了吗?

您在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();
}
}

最新更新