我有一个WebAPI应用程序,我必须从实体对象映射到DTO,以适应API响应的外观。对于实体类型和DTO之间的这种映射,我使用AutoMapper
如下所示:
Mapper.CreateMap<CustomerEntity, CustomerDTO>()
.ForMember(dest => dest.Age, opts => opts.Ignore())
.ForMember(dest => dest.Name, opts => opts.MapFrom(src => src.CustomerName));
然后,从其中一项操作的一行开始,我将返回带有适当属性名称的必需JSON格式:
public CustomerDTO GetCustomer(int Id)
{
return Mapper.Map<CustomerEntity, CustomerDTO>(db.Customer.Find(id));
}
但是由于这个原因,我必须创建许多类型(DTO),而我宁愿只给我一个anonymous
或dynamic
结果,因为无论如何它将以JSON的形式返回,并且我不会在其他任何类型中使用这些类型。
我也可以像下面这样进行投影:
public CustomerDTO GetCustomer(int Id)
{
var customer = db.Customer.Find(id));
return new CustomerDTO{ Name = customer.CustomerName, OtherProperty = "others" };
}
但是随后,我将不得不手动重复代码,而且我还将错过上面的AutoMapper的映射配置功能。
本质上,真正有用的是以下内容:
Mapper.CreateMap<CustomerEntity, dynamic>()
.ForMember("Age", opts => opts.Ignore())
.ForMember("Name", opts => opts.MapFrom(src => src.CustomerName));
但这是不可能的。这更多是一个概念性问题,而不是一个具体的问题,因此请帮助我理解如何防止在API应用程序中创建DTO来满足响应结构(JSON)与实体对象之间的差异(假设甚至可以选择)。也欢迎任何其他建议。
您可以使用NewtonSoft的Json序列化器,并使用[JsonIgnore]标记您不想映射的Entity类的属性。不再需要动态或其他方式的DTO。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句