繁体   English   中英

在API应用程序中从实体类型映射到DTO

[英]Mapping from Entity Type to DTO in API application

我有一个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),我宁愿给我一个anonymousdynamic结果,因为它将以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,动态或其他。

我不知道如何继续使用Automapper并执行此操作。 但是,您可以使用匿名类型并使WebApi方法返回IHttpActionResult。

public CustomerDTO GetCustomer(int Id)
{
   var customer = db.Customer.Find(id));
   return new CustomerDTO{ Name = customer.CustomerName, OtherProperty = "others" };
}

会成为

public IHttpActionResult GetCustomer(int Id)
{
   var customer = db.Customer.Find(id));
   return Ok(new { Name = customer.CustomerName, OtherProperty = "others" });
}

WebApi中的JSON或XML序列化程序将负责创建正确的序列化,并且您的客户端应该接收相同的输出。

上面的输出类似于下面的内容。

HTTP/1.1 200 OK
Content-Length: 47
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
X-SourceFiles: =?UTF-8?B?SjpcQ29kZVxTb3VyY2VcVmFuZ3VhcmRcVk5HIEFQSVxQT0NzXFBhZ2luZ1BPQ1xNZW1iZXJz?=
X-Powered-By: ASP.NET
Date: Mon, 08 Sep 2014 21:20:57 GMT

{"Name":"John Robers","OtherProperty":"others"}

网上有几篇关于新IHttpActionResult的好文章,我发现这篇文章很有用。 它还概述了其他一些新的WebApi 2功能。

http://bitoftech.net/2014/03/05/new-asp-net-web-api-2-ihttpactionresult-cors-tutorial/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM