我在JSON中获得了一个WebApi2控制器无法识别的对象列表
JSON列表如下:
{
"FirstObjectType": [{"Name": "the_name"}],
"SecondObjectType": [{"Label": "01_obj"}, {"Label": "02_obj"}]
}
Model类是:
public class CompositeObject
{
[JsonProperty("FirstObjectType")]
public List<FirstObject> fo { get; set; }
[JsonProperty("SecondObjectType")]
public List<SecondObject> so { get; set; }
}
控制器是:
public IHttpActionResult PostList([FromBody] CompositeObject jsonList)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
List<FirstObject> fo_list = jsonList.fo;
foreach (var item in fo_list)
{
db.FirstObject.Add(item);
db.SaveChanges();
}
return StatusCode(HttpStatusCode.OK);
}
当我提交Post动作时,控制器会将CompositeObject jsonList中的两个列表识别为Null
答案 0 :(得分:0)
您的模型中存在一个问题,即名称未匹配。您必须将模型更新为:
public class FirstObjectType
{
public string Name { get; set; }
}
public class SecondObjectType
{
public string Label { get; set; }
}
public class RootObject
{
public List<FirstObjectType> FirstObjectType { get; set; }
public List<SecondObjectType> SecondObjectType { get; set; }
}
我假设FirstObjectType
包含名称为Name
的字符串,而SecondObjectType
包含名称为Label
的字符串。确保为JSON字符串中的FirstObjectType
和SecondObjectType
类的属性使用相同的名称。
答案 1 :(得分:0)
问题出在客户端代码中,因为我错过了在标题部分将内容类型设置为application/json
。
通过这种方式,WebApi服务器无法以正确的方式识别JSON对象(我认为服务器寻找x-www-form-urlencoded类型)
所以,上面的代码是正确的,但我找到了另一个解决方案
在WebApi控制器中:
using Newtonsoft.Json.Linq;
public IHttpActionResult PostList([FromBody] JObject ReceivedObjectsList)
{
var receivedLists = ReceivedObjectsList.Properties();
List<FirstObject> fo = ReceivedObjectsList["FirstObjectType"].ToObject<List<FirstObject>>();
List<SecondObject> so = ReceivedObjectsList["SecondObjectType"].ToObject<List<SecondObject>>();
...
}