如何将派生列表 类 映射到 DTO?
How to map a list of derived classes to DTO?
我有一个简单的查询,我想将其映射到我的 DTO。
{
"list": [
{ "propA": "A1" },
{ "propA": "A2" },
{ "propB": "B1" },
...
]
}
我尝试过类似的方法,但当然 .net 无法弄清楚哪个 class 应该用于映射到:
public abstract class BaseClass {
}
public class ClassA : BaseClass {
public string PropA { get; set; }
}
public class ClassB : BaseClass {
public string PropB { get; set; }
}
public class MyDto {
public List<BaseClass> List { get; set; }
}
为了完整起见,最后是我的控制器 class 方法:
[HttpPost]
public Task<IActionResult> Create(MyDto obj) {
...
}
所以问题是,如何将我的 JSON 请求正文映射到具有 PropA
和 PropB
属性的对象中?
假设您正在使用 Json.Net 来(反)序列化 json,JsonSubTypes 库支持根据特定属性的存在反序列化为一组子 classes每个子class:
https://github.com/manuc66/JsonSubTypes#deserializeobject-mapping-by-property-presence
在你的例子中,你会装饰你的底座 class 用:
[JsonConverter(typeof(JsonSubtypes))]
[JsonSubtypes.KnownSubTypeWithProperty(typeof(ClassA), "PropA")]
[JsonSubtypes.KnownSubTypeWithProperty(typeof(ClassB), "PropB")]
我有一个简单的查询,我想将其映射到我的 DTO。
{
"list": [
{ "propA": "A1" },
{ "propA": "A2" },
{ "propB": "B1" },
...
]
}
我尝试过类似的方法,但当然 .net 无法弄清楚哪个 class 应该用于映射到:
public abstract class BaseClass {
}
public class ClassA : BaseClass {
public string PropA { get; set; }
}
public class ClassB : BaseClass {
public string PropB { get; set; }
}
public class MyDto {
public List<BaseClass> List { get; set; }
}
为了完整起见,最后是我的控制器 class 方法:
[HttpPost]
public Task<IActionResult> Create(MyDto obj) {
...
}
所以问题是,如何将我的 JSON 请求正文映射到具有 PropA
和 PropB
属性的对象中?
假设您正在使用 Json.Net 来(反)序列化 json,JsonSubTypes 库支持根据特定属性的存在反序列化为一组子 classes每个子class:
https://github.com/manuc66/JsonSubTypes#deserializeobject-mapping-by-property-presence
在你的例子中,你会装饰你的底座 class 用:
[JsonConverter(typeof(JsonSubtypes))]
[JsonSubtypes.KnownSubTypeWithProperty(typeof(ClassA), "PropA")]
[JsonSubtypes.KnownSubTypeWithProperty(typeof(ClassB), "PropB")]