【问题标题】:Automapper Mapping自动映射器映射
【发布时间】:2009-10-27 10:49:35
【问题描述】:

我正在尝试使用如下属性名称映射一个对象:

Property_One -> PropertyOne ... etc
Sample_Property -> SampleProperty

有没有比将每个属性单独映射到另一个更好的方法来做到这一点?唯一的区别是下划线。

【问题讨论】:

  • 你可以使用ValueInjecter valueinjecter.codeplex.com/documentation轻松做到这一点,这将是一个修改后的SameNameType ValueInjection,你只需在寻找目标属性时将“_”替换为string.empty

标签: .net automapper


【解决方案1】:

您需要在源端指定下划线命名约定:

Mapper.Initialize(i => 
{
    i.SourceMemberNamingConvention = new LowerUnderscoreNamingConvention();
    i.CreateMap<Source, Dest>(); 
});

您可以全局(如上所示)或按配置文件执行此操作,前提是您的某些源类型遵循此命名约定。

【讨论】:

    【解决方案2】:
    public class Source
    {
        public string Property_One { get; set; }
    }
    
    public class Dest
    {
        public string PropertyOne { get; set; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Mapper.CreateMap<Source, Dest>()
                .ForMember(dest => dest.PropertyOne,
                           opt => opt.MapFrom(src => src.Property_One));
    
            var source = new Source
            {
                Property_One = "property1"
            };
    
            var destination = Mapper.Map<Source, Dest>(source);
            Console.WriteLine(destination.PropertyOne);
        }
    }
    

    【讨论】:

    • 这就是我现在正在做的事情,我需要一种通用的映射方式。看起来 INamingConvention 接口将完成此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2021-09-15
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多