我正在尝试以JSON对象为主体进行POST请求。 JSON对象包含嵌套类型,这些类型是我正在使用的库中的预定义模型,但是当我使用[FromBody]属性时,仅绑定了根模型,而嵌套模型为null。
我尝试过不使用[FromBody]属性,但它也仅绑定根级别模型。
POST对象示例: Foo将是一个带有Bar对象的模型。 Bar将是具有属性名称和firstLetter的模型。
lengthFooBArX
Controller路由如下:
{
"foo": [
{
"bar": {
"name": "bar",
"firstLetter": "b"
}
},
{
"bar": {
"name": "bar1",
"firstLetter": "b"
}
}
]
}
Request类如下:
[HttpPost("example-route")]
public async Task<ActionResult<string>> Static([FromBody]Request request){
//Some Action
}
当我打电话给它时,Bar将被分配,但是它的Name和FirstLetter属性仍然为空。
编辑:我将在示例中添加列表,但是我可能已经简化了。实际的请求看起来更像:
//Request class
public class Request{
[JsonConstructor]
public Request(Bar b){
this.Bar = b;
}
public List<Bar> Bar = { get; set; }
}
//Bar class
public class Bar {
public Bar(string name, string firstLetter){
this.Name = name;
this.FirstLetter = firstLetter;
}
public string Name { get; set; }
public string FirstLetter { get; set; }
}
prop1,prop2,prop3,type和contactInfo都是我正在使用的库中定义的模型。我正在尝试获取ContactInfo对象,到目前为止,当我逐步执行操作时,它可以为ContactInfo分配两个对象,但是它们的属性(系统和值)均为null。我检查了拼写和大小写,但那里没有问题。
答案 0 :(得分:3)
您的Request
类必须与JSON中的内容完全匹配,并注意嵌套:
public class Request
{
public List<BarContainer> foo {get; set;}
// Your constructor should initialize this list.
}
public class BarContainer
{
public Bar bar {get; set;}
}
public class Bar
{
[JsonProperty("name")]
public string Name { get; set;}
[JsonProperty("firstLetter")]
public string FirstLetter { get; set;}
}
注意:反序列化区分大小写,因此您需要使用JSON中的确切名称,bar
,foo
,name
,firstLetter
或使用属性或配置以支持属性名称的不同大小写: