使用映射库将嵌套对象映射到C#中的自定义对象
我有以下对象结构:使用映射库将嵌套对象映射到C#中的自定义对象,c#,.net,mapping,automapper,C#,.net,Mapping,Automapper,我有以下对象结构: /// <summary> /// nested message instance provided by a business service /// </summary> public class Message { public string Subject { get; set; } public DateTime CreationDate { get; set; } public List<Message>
/// <summary>
/// nested message instance provided by a business service
/// </summary>
public class Message
{
public string Subject { get; set; }
public DateTime CreationDate { get; set; }
public List<Message> Messages { get; set; }
}
/// <summary>
/// UI Object used to display a nested message structure
/// </summary>
public class MessageViewModel : ViewModelBase
{
public bool IsSelected { get; set; }
public string Subject { get; set; }
public DateTime CreationDate { get; set; }
public List<MessageViewModel> Messages { get; set; }
}
//
///业务服务提供的嵌套消息实例
///
公共类消息
{
公共字符串主题{get;set;}
公共日期时间创建日期{get;set;}
公共列表消息{get;set;}
}
我想将该对象映射到以下对象结构:
/// <summary>
/// nested message instance provided by a business service
/// </summary>
public class Message
{
public string Subject { get; set; }
public DateTime CreationDate { get; set; }
public List<Message> Messages { get; set; }
}
/// <summary>
/// UI Object used to display a nested message structure
/// </summary>
public class MessageViewModel : ViewModelBase
{
public bool IsSelected { get; set; }
public string Subject { get; set; }
public DateTime CreationDate { get; set; }
public List<MessageViewModel> Messages { get; set; }
}
//
///用于显示嵌套消息结构的UI对象
///
公共类MessageViewModel:ViewModelBase
{
公共布尔值被选为{get;set;}
公共字符串主题{get;set;}
公共日期时间创建日期{get;set;}
公共列表消息{get;set;}
}
是否有任何绘图程序可以轻松完成这项工作?您可以使用它。要首先映射某些类型,需要创建一些映射:
Mapper.Initialize(cfg => cfg
.CreateMap<Message, MessageViewModel>());
这是静态映射器的唯一示例,但也可以将映射器创建为对象。有关更高级的主题,您可以阅读文档:我强烈建议使用Automapper,因为它非常简单易用。在Automapper中,默认情况下会映射具有相同名称的字段,并且需要最少的配置。您希望实现的映射将按以下方式完成:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Message, MessageViewModel>();
});
SourceClass SourceObject = new SourceClass();
// Populate SourceObject with values
var mapper = config.CreateMapper();
DesitnationClass DestinationObject = mapper.Map<DesitnationClass>(SourceObject);
var config=new-MapperConfiguration(cfg=>
{
CreateMap();
});
对于集合,如果为其数据类型定义了配置,Automapper可以映射以下内容:
- 数不清
- I收集
- 伊里斯特
- 名单
- 阵列
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Message, MessageViewModel>()
.ForMember(destination => destination.SomeDestinationField, map => map.MapFrom(source => source.SomeSourceFieldWithDifferentName))
.ForMember(destination => destination.SomeDestinationField, map => map.MapFrom(source => source.SomeSourceField ?? SomeDefaultValue));
});
var config=new-MapperConfiguration(cfg=>
{
cfg.CreateMap()
.ForMember(destination=>destination.SomeDestinationField,map=>map.MapFrom(source=>source.SomeSourceFieldWithDifferentName))
.ForMember(destination=>destination.SomeDestinationField,map=>map.MapFrom(source=>source.SomeSourceField??SomeDefaultValue));
});
然后,我们可以使用MapperConfiguration对象初始化映射器,并按如下方式执行映射:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Message, MessageViewModel>();
});
SourceClass SourceObject = new SourceClass();
// Populate SourceObject with values
var mapper = config.CreateMapper();
DesitnationClass DestinationObject = mapper.Map<DesitnationClass>(SourceObject);
SourceClass SourceObject=new SourceClass();
//用值填充SourceObject
var mapper=config.CreateMapper();
DesitnationClass DestinationObject=mapper.Map(SourceObject);
我建议您仔细阅读这些内容。Automapper是最好的:)除了
IsSelected
属性(我不知道您如何映射它),其他内容将非常简单地使用Automapper。谢谢,关于IsSelected,使用Automapper很容易解决。。它将被映射并用false初始化。