c# - 使用 Automapper 从动态/JObject 映射到任意类型而不创建多个映射

标签 c# .net json asp.net-core automapper

在 ASP.NET Core Controller 方法中,它有一个 dynamic 类型的参数,我想使用 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
  }
}

现在一切正常,除了 bool 属性,无论 JSON 中的值是什么, bool 属性总是设置为 false。我有 JSON 输入格式化程序,它在参数中构造实例。我检查了实例的类型,发现它们是 Newtonsoft.Json.Linq.JObject

知道如何让 bool 值正确运行吗?

我想继续支持使用 TDestination IMapper.Map<TDestination>(object source) 映射任意数量的目标类(参见 here )而不必为每个映射显式构造 AutoMapper 映射。有什么提示可以实现吗?

附言我正在使用 AutoMapper 6.2.1 和 ASP.NET Core 1.1.3

最佳答案

问题是 JObject 将其内容包装在 JValue 中,因此默认情况下它不能与 AM 一起工作,AM 当然需要实际值。所以你必须让 AM 知道如何映射一个 JValue:

cfg.CreateMap<JValue, object>().ConvertUsing(source => source.Value);

关于c# - 使用 Automapper 从动态/JObject 映射到任意类型而不创建多个映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47473087/

相关文章:

javascript - 从通用共享应用程序访问类库

c# - 在 WinForm 应用程序中使用工作单元模式时应如何处理事务

c# - 系统.InvalidOperationException : < xmlns ='' > was not expected

javascript - 如何跟踪使用特定输入元素的事件

php - json_encode/decode char 麻烦

C# PdfSharp - 从 HTML 生成 PDF 的困难

c# - 添加数据库迁移时指定应用程序设置

c# - 如何检查一个列表是否包含另一个列表 C#

android - 返回在 android 中的 yii Controller 中形成的 JSON 时出错

javascript - 循环遍历 JSON 数据以生成 HTML