Dns AutoMapper-如何将具体的域类映射到继承的目标DTO类?
我有一个平面域类,如下所示:Dns AutoMapper-如何将具体的域类映射到继承的目标DTO类?,dns,automapper,dto,Dns,Automapper,Dto,我有一个平面域类,如下所示: public class ProductDomain { public int ID { get; set; } public string Manufacturer { get; set; } public string Model { get; set; } public string Description { get; set; } public string Price { get; set; } } pu
public class ProductDomain
{
public int ID { get; set; }
public string Manufacturer { get; set; }
public string Model { get; set; }
public string Description { get; set; }
public string Price { get; set; }
}
public class ProductInfoDTO
{
public int ID { get; set; }
public string Manufacturer { get; set; }
public string Model{ get; set; }
}
public class ProductDTO : ProductInfoDTO
{
public string Description { get; set; }
public string Price { get; set; }
}
我有两个DTO类,如下所示:
public class ProductDomain
{
public int ID { get; set; }
public string Manufacturer { get; set; }
public string Model { get; set; }
public string Description { get; set; }
public string Price { get; set; }
}
public class ProductInfoDTO
{
public int ID { get; set; }
public string Manufacturer { get; set; }
public string Model{ get; set; }
}
public class ProductDTO : ProductInfoDTO
{
public string Description { get; set; }
public string Price { get; set; }
}
现在的问题是:
情景1:
Mapper.CreateMap<ProductDomain, ProductInfoDTO>() // this mapping works fine
情景2:
Mapper.CreateMap<ProductDomain, ProductDTO>() // this mapping is not working and throws System.TypeInitializationException
所以我的问题是如何在ProductDomain和ProductDTO之间创建映射,后者继承ProductInfoDTO,而不破坏源类和目标类的定义。另外,我不想为域类ProductDomain引入任何新的继承
谢谢您可以像这样构建自己的自定义类型转换器
public class ProductDomainToProductDTOConverter : ITypeConverter<ProductDomain, ProductDTO>
{
public ProductDTO Convert(ProductDomain source)
{
ProductDTO product = new ProductDTO();
product.Price = source.Price;
...
return product;
}
}
Mapper.CreateMap<ProductDomain, ProductDTO>().ConvertUsing<ProductDomainToProductDTOConverter>();
然后用自定义的TypeConverter创建一个映射,如下所示
public class ProductDomainToProductDTOConverter : ITypeConverter<ProductDomain, ProductDTO>
{
public ProductDTO Convert(ProductDomain source)
{
ProductDTO product = new ProductDTO();
product.Price = source.Price;
...
return product;
}
}
Mapper.CreateMap<ProductDomain, ProductDTO>().ConvertUsing<ProductDomainToProductDTOConverter>();
您可以像这样构建自己的自定义类型转换器
public class ProductDomainToProductDTOConverter : ITypeConverter<ProductDomain, ProductDTO>
{
public ProductDTO Convert(ProductDomain source)
{
ProductDTO product = new ProductDTO();
product.Price = source.Price;
...
return product;
}
}
Mapper.CreateMap<ProductDomain, ProductDTO>().ConvertUsing<ProductDomainToProductDTOConverter>();
然后用自定义的TypeConverter创建一个映射,如下所示
public class ProductDomainToProductDTOConverter : ITypeConverter<ProductDomain, ProductDTO>
{
public ProductDTO Convert(ProductDomain source)
{
ProductDTO product = new ProductDTO();
product.Price = source.Price;
...
return product;
}
}
Mapper.CreateMap<ProductDomain, ProductDTO>().ConvertUsing<ProductDomainToProductDTOConverter>();
你的代码中肯定还有其他东西。我将上面的代码复制/粘贴到一个项目中,它运行得很好。我甚至创建了一个示例ProductDomain对象,它将数据映射到ProductDTO,没有任何问题。我将上面的代码复制/粘贴到一个项目中,它运行得很好。我甚至创建了一个示例ProductDomain对象,它将数据映射到ProductDTO,没有任何问题。