C# 发射贴图器修饰和属性名称不匹配
如何使用Emit Mapper将用户类映射到UserModel类C# 发射贴图器修饰和属性名称不匹配,c#,mapper,emitmapper,C#,Mapper,Emitmapper,如何使用Emit Mapper将用户类映射到UserModel类 公共类用户 { 公共Guid Id{get;set;} 公共字符串名{get;set;} 公共字符串LastName{get;set;} 公共IList角色{get;set;} 上市公司{get;set;} } 公共类用户模型 { 公共Guid Id{get;set;} 公共Guid公司ID{get;set;} 公共字符串名{get;set;} 公共字符串LastName{get;set;} 公共IList角色{get;set;}
公共类用户
{
公共Guid Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共IList角色{get;set;}
上市公司{get;set;}
}
公共类用户模型
{
公共Guid Id{get;set;}
公共Guid公司ID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共IList角色{get;set;}
}
有几个问题:
- 我需要将对象展平,这样我将拥有CompanyId而不是Company对象
- Company对象具有属性Id,在UserModel中,我具有与公司Id对应的CompanyId,但属性名称不匹配
- 我需要将
映射到列表
列表
public class SourceObject
{
public SourceSubObject SomeClass { get; set; }
}
public SourceSubObject
{
public int Age { get; set; }
}
var mapper = new DefaultMapConfig().ConvertUsing<Source, Target>(Converter);
var target = ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>(mapper).Map(source);
目标
public class Target
{
public int SomeClassAge { get; set; }
}
其次,一个选项是让默认设置复制它可以复制的属性,然后手动执行其余操作
var target = ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>().Map(source);
target.CompanyId = target.Company.CompanyId;
用法
public class SourceObject
{
public SourceSubObject SomeClass { get; set; }
}
public SourceSubObject
{
public int Age { get; set; }
}
var mapper = new DefaultMapConfig().ConvertUsing<Source, Target>(Converter);
var target = ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>(mapper).Map(source);
var mapper=new DefaultMapConfig().ConvertUsing(Converter);
var target=ObjectMapperManager.DefaultInstance.GetMapper(映射器).Map(源);
更新
public class SourceObject
{
public SourceSubObject SomeClass { get; set; }
}
public SourceSubObject
{
public int Age { get; set; }
}
var mapper = new DefaultMapConfig().ConvertUsing<Source, Target>(Converter);
var target = ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>(mapper).Map(source);
角色和角色模型映射的内容。在这种情况下,您似乎需要启用深度复制,并且根据类的定义,您可以直接复制它或进行一些自定义映射
ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>(new DefaultMapConfig().DeepMap<ClassToDeepMap>().DeepMap<ClassToDeepMap>()).Map(source, target);
ObjectMapperManager.DefaultInstance.GetMapper(新的DefaultMapConfig().DeepMap().DeepMap()).Map(源,目标);
要将模型展平,您可以检查。但默认情况下,它有一个约定,即在目标中使用子类属性名称作为前缀
来源
public class SourceObject
{
public SourceSubObject SomeClass { get; set; }
}
public SourceSubObject
{
public int Age { get; set; }
}
var mapper = new DefaultMapConfig().ConvertUsing<Source, Target>(Converter);
var target = ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>(mapper).Map(source);
目标
public class Target
{
public int SomeClassAge { get; set; }
}
其次,一个选项是让默认设置复制它可以复制的属性,然后手动执行其余操作
var target = ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>().Map(source);
target.CompanyId = target.Company.CompanyId;
用法
public class SourceObject
{
public SourceSubObject SomeClass { get; set; }
}
public SourceSubObject
{
public int Age { get; set; }
}
var mapper = new DefaultMapConfig().ConvertUsing<Source, Target>(Converter);
var target = ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>(mapper).Map(source);
var mapper=new DefaultMapConfig().ConvertUsing(Converter);
var target=ObjectMapperManager.DefaultInstance.GetMapper(映射器).Map(源);
更新
public class SourceObject
{
public SourceSubObject SomeClass { get; set; }
}
public SourceSubObject
{
public int Age { get; set; }
}
var mapper = new DefaultMapConfig().ConvertUsing<Source, Target>(Converter);
var target = ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>(mapper).Map(source);
角色和角色模型映射的内容。在这种情况下,您似乎需要启用深度复制,并且根据类的定义,您可以直接复制它或进行一些自定义映射
ObjectMapperManager.DefaultInstance.GetMapper<Source, Target>(new DefaultMapConfig().DeepMap<ClassToDeepMap>().DeepMap<ClassToDeepMap>()).Map(source, target);
ObjectMapperManager.DefaultInstance.GetMapper(新的DefaultMapConfig().DeepMap().DeepMap()).Map(源,目标);
- 为了讨人喜欢,我使用了Emit Mapper源文件中示例中的配置:
- 要使名称与公司类中的名称匹配,字段应为名称
Id
- 为了将
映射到List
,我使用了自定义转换器:List
public class EntityListToModelListConverter<TEntity, TModel> { public List<TModel> Convert(IList<TEntity> from, object state) { if (from == null) return null; var models = new List<TModel>(); var mapper = ObjectMapperManager.DefaultInstance.GetMapper<TEntity, TModel>(); for (int i = 0; i < from.Count(); i++) { models.Add(mapper.Map(from.ElementAt(i))); } return models; } }
因此,总而言之:公共类EntityListToModelListConverter { 公共列表转换(IList-from,对象状态) { if(from==null) 返回null; var models=新列表(); var mapper=ObjectMapperManager.DefaultInstance.GetMapper(); for(int i=0;i
var userMapper = ObjectMapperManager.DefaultInstance.GetMapper<User, UserModel>( new FlatteringConfig().ConvertGeneric(typeof(IList<>), typeof(IList<>), new DefaultCustomConverterProvider(typeof(EntityListToModelListConverter<,>))));
var userMapper=ObjectMapperManager.DefaultInstance.GetMapper( 新的奉承配置().ConvertGeneric(typeof(IList),typeof(IList), 新的DefaultCustomConverterProvider(typeof(EntityListToModelListConverter));
- 使用带有自定义转换器的平坦化配置时出现问题,请检查我的问题:
- 为了讨人喜欢,我使用了Emit Mapper源文件中示例中的配置:
- 要使名称与公司类中的名称匹配,字段应为名称
Id
- 为了将
映射到List
,我使用了自定义转换器:List
public class EntityListToModelListConverter<TEntity, TModel> { public List<TModel> Convert(IList<TEntity> from, object state) { if (from == null) return null; var models = new List<TModel>(); var mapper = ObjectMapperManager.DefaultInstance.GetMapper<TEntity, TModel>(); for (int i = 0; i < from.Count(); i++) { models.Add(mapper.Map(from.ElementAt(i))); } return models; } }
因此,总而言之:公共类EntityListToModelListConverter { 公共列表转换(IList-from,对象状态) { if(from==null) 返回null; var models=新列表(); var mapper=ObjectMapperManager.DefaultInstance.GetMapper(); for(int i=0;i
var userMapper = ObjectMapperManager.DefaultInstance.GetMapper<User, UserModel>( new FlatteringConfig().ConvertGeneric(typeof(IList<>), typeof(IList<>), new DefaultCustomConverterProvider(typeof(EntityListToModelListConverter<,>))));
var userMapper=ObjectMapperManager.DefaultInstance.GetMapper( 新的奉承配置().ConvertGeneric(typeof(IList),typeof(IList), 新的DefaultCustomConverterProvider(typeof(EntityListToModelListConverter));
- 使用带有自定义转换器的平坦化配置时出现问题,请检查我的问题:
new fatteringconfig().ConvertGeneric(typeof(B)、typeof(BMapped)、new DefaultCustomConverterProvider(typeof(CustomConverterClass))
方法I中的