我是C#,dotnet核心的新手。我正在从数据库中获取数据,如下所示。该数据非常平坦。我需要转换为另一个对象。
public class Lead
{
public long Id { get; set; }
public short LeadCreatorId { get; set; }
public short LeadOwnerId { get; set; }
public string ProductId { get; set; }
public LeadPriority Priority { get; set; }
public LeadStatus Status { get; set; }
public long LeadCustomerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
public string MobileNo { get; set; }
public DateTime CreatedOn { get; set; }
}
我需要将其转换为下面的对象。
public class LeadDto
{
public long Id { get; set; }
public short LeadCreatorId { get; set; }
public short LeadOwnerId { get; set; }
public string ProductId { get; set; }
public LeadPriority Priority { get; set; }
public LeadStatus Status { get; set; }
public LeadCustomer LeadCustomer { get; set; }
public DateTime CreatedOn { get; set; }
}
LeadCustomer如下所示-
public class LeadCustomer{
public long Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
public string MobileNo { get; set; }
}
我如何轻松地做到这一点?我可以使用dto进行转换。
答案 0 :(得分:2)
由于LeadDto
和LeadCustomer
取决于Lead
:
一种选择是向LeadDto
和LeadCustomer
添加一个构造函数,以Lead
对象作为参数并映射到属性。
另一种选择是创建静态扩展方法。
public static LeadDto ToLeadDto(this Lead lead)
{
return new LeadDto(){
this.Id = lead.Id;
// Etc..
}
}
然后您可以使用
LeadDto myObj = someLead.ToLeadDto();
还有另一个选择是使用诸如AutoMapper之类的库。我从来没有使用过它,对于您的需求,IMO来说是过大了。
答案 1 :(得分:2)
一种简单直接的方法可能是在Lead类上具有一个函数以返回所需的对象。
public class Lead
{
//// your properties
public LeadDto GetOtherObject()
{
LeadDto object = new LeadDto();
////Map properties from this to object
return object;
}
}
否则,如果上述方法在给定的上下文中似乎不正确,则可以具有静态实用程序功能。
public static class Utility
{
public static LeadDto GetOtherObject(Lead leadObject)
{
LeadDto object = new LeadDto();
////Map properties from leadObject to object
return object;
}
}
如果LeadDto
的耦合严格仅与Lead耦合,则可以在Lead
的构造函数中使用LeadDto
对象作为参数本身。
从Lead到LeadDto映射属性时,请务必慎重考虑LeadPriority
和LeadStatus
,因为它们根据结构或类而有所不同。
答案 2 :(得分:2)
互联网上有许多映射器库。仅举几例
他们每个人都有自己的优点和缺点。 我个人认为编写自己的mapper方法是值得的,因为您将完全控制自己编写的内容。
我同意可能要花一些时间,但不会花很长时间。
答案 3 :(得分:0)
按照@G_S的建议,我使用了如下的自动映射器-
CreateMap<Lead, LeadDto>()
.ForMember(desc => desc.LeadCustomer, opt => opt.ResolveUsing(src =>
{
return new LeadCustomer()
{
Id = src.LeadCustomerId,
FirstName = src.FirstName,
LastName = src.LastName,
EmailAddress = src.EmailAddress,
MobileNo = src.MobileNo
};
}));