【发布时间】:2017-11-24 12:12:53
【问题描述】:
在具有dynamic 类型参数的 ASP.NET Core 控制器方法中,我想使用 Automapper 进行映射,如下所示。该方法如下所示:
public IActionRsult Post([FromBody] dynamic model) {
// Skip validation
switch(model.src) {
case "employer"
var employerVM = _mapper.Map<EmployerViewModel>(model.data);
// Work with mapped object
break;
case "employee"
var employeeVM = _mapper.Map<EmployeeViewModel>(model.data);
// Work with mapped object
break;
}
}
EmployerViewModel 看起来像这样:
public class EmployerViewModel {
public string CompanyName {get; set;}
public string CompanyAddress {get; set;}
}
而EmployeeViewModel 看起来像这样:
public class EmployeeViewModel {
public string FirstName {get; set;}
public string LastName {get; set;}
public bool Ready {get; set;}
}
它从客户端接收 JSON 数据,可能如下所示:
{
"src": "employer",
"data": {
"CompanyName": "Pioneers Ltd.",
"CompanyAddress": "126 Schumacher St., London"
}
}
或者这个:
{
"src": "employee",
"data": {
"FirstName": "John",
"LastName": "Doe",
"Ready": true
}
}
现在一切正常,除了布尔属性,无论 JSON 中的值是什么,它总是设置为 false。我有 JSON 输入格式化程序,它在参数中构造实例。我检查了实例的类型,发现它们是 Newtonsoft.Json.Linq.JObject
知道如何让布尔值正确运行吗?
我想继续支持使用TDestination IMapper.Map<TDestination>(object source)(请参阅here)映射任意数量的目标类,而不必为每个类显式构造 AutoMapper 映射。任何提示如何实现这一点?
附:我正在使用 AutoMapper 6.2.1 和 ASP.NET Core 1.1.3
【问题讨论】:
-
例如它与 ExpandoObject 一起工作,所以这是一个模型如何组合在一起的问题。
-
JSON 输入格式化程序在动态参数模型中打包了一个 Newtonsoft.Json.Linq.JObject 实例
-
那么这就是您应该调查的内容。就 AM 而言,它是有效的。
-
已编辑问题以强调由 JSON 输入格式化程序产生的 JObject
标签: c# .net json asp.net-core automapper