C# .NET Core 3 Web API:[FromBody]如何绑定抽象类属性
我有API模型请求的类层次结构:C# .NET Core 3 Web API:[FromBody]如何绑定抽象类属性,c#,.net,asp.net-core,asp.net-core-webapi,asp.net-core-3.1,C#,.net,Asp.net Core,Asp.net Core Webapi,Asp.net Core 3.1,我有API模型请求的类层次结构: public class Human { public string Name { get; set; } public byte Age { get; set; } public IEnumerable<HumanData> Data { get; set; } } public abstract class HumanData { public Guid Id { get; set; } public
public class Human
{
public string Name { get; set; }
public byte Age { get; set; }
public IEnumerable<HumanData> Data { get; set; }
}
public abstract class HumanData
{
public Guid Id { get; set; }
public string Text { get; set; }
public virtual string Type => GetType().Name;
}
public class HealthData : HumanData
{
public byte Weight { get; set; }
public byte Growth { get; set; }
public string Pressure { get; set; }
}
public class AddressData : HumanData
{
public string City { get; set; }
public string Street { get; set; }
public uint House { get; set; }
public uint Apartment { get; set; }
}
但是请求模型没有拉入
humanRequest
变量。原因在Data
字段HumanData
类层次结构中。如何制作这样的绑定?如果您像这样更改动作签名,那么获得模型的唯一方法是
[HttpPost]
public async Task<IActionResult> Add([FromBody] JObject humanRequest)
{
//Functionality
}
but you will have untyped Object in this case and you have to read it like this:
var name=humanRequest["Name"].ToString();
{
Id: "0f8fad5b-d9cb-469f-a165-70867728950e"
"Name":"Alex",
"Age":30,
AddressId="0f8fad5b-d9cb-469f-a165-70867728950e",
HealthId="0f8fad5b-d9cb-469f-a165-70867728950d",
"Address":{
"Id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"Text":"Residence address",
"City":"Elblag",
"Street":"1 maja",
"House":"95",
"Type":"AddressData"
},
"Health":{
"Id": "0f8fad5b-d9cb-469f-a165-70867728950d",
"Text":"Residence address",
"Weight":"75",
"Growth":"179",
"Pressure":"120/85",
"Type":"HealthData"
}
}
您的Json模型应该如下所示
[HttpPost]
public async Task<IActionResult> Add([FromBody] JObject humanRequest)
{
//Functionality
}
but you will have untyped Object in this case and you have to read it like this:
var name=humanRequest["Name"].ToString();
{
Id: "0f8fad5b-d9cb-469f-a165-70867728950e"
"Name":"Alex",
"Age":30,
AddressId="0f8fad5b-d9cb-469f-a165-70867728950e",
HealthId="0f8fad5b-d9cb-469f-a165-70867728950d",
"Address":{
"Id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"Text":"Residence address",
"City":"Elblag",
"Street":"1 maja",
"House":"95",
"Type":"AddressData"
},
"Health":{
"Id": "0f8fad5b-d9cb-469f-a165-70867728950d",
"Text":"Residence address",
"Weight":"75",
"Growth":"179",
"Pressure":"120/85",
"Type":"HealthData"
}
}
但老实说,我不明白你为什么需要3张桌子放人。在大多数情况下,您将拥有一对一的关系。我想在1中合并所有这3个表。您使用的是哪个JSON序列化器?我使用的是NeNoToStutJSON。
{
Id: "0f8fad5b-d9cb-469f-a165-70867728950e"
"Name":"Alex",
"Age":30,
AddressId="0f8fad5b-d9cb-469f-a165-70867728950e",
HealthId="0f8fad5b-d9cb-469f-a165-70867728950d",
"Address":{
"Id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"Text":"Residence address",
"City":"Elblag",
"Street":"1 maja",
"House":"95",
"Type":"AddressData"
},
"Health":{
"Id": "0f8fad5b-d9cb-469f-a165-70867728950d",
"Text":"Residence address",
"Weight":"75",
"Growth":"179",
"Pressure":"120/85",
"Type":"HealthData"
}
}