代码之家  ›  专栏  ›  技术社区  ›  blazerix

Automapper将字符串错误地映射到列表<string>

  •  0
  • blazerix  · 技术社区  · 4 年前

    我有两节课

     public class SourceClass
    {
        public Guid Id { get; set; }
        public string Provider { get; set; }
    }
    
    
    public class DestinationClass
    {
        public Guid Id { get; set; }
        public List<string> Provider { get; set; }
    }
    

    我的映射如下:

    CreateMap<SourceClass, DestinationClass>()
        .ForMember(destinationMember => destinationMember.Provider,
            memberOptions => memberOptions.MapFrom(src => 
                new List<string> { src.Provider ?? "" }));
    

    现在,以前 Provider 在DestinationClass中 Providers 映射正常工作。然而,在使两个类中的拼写一致后,映射无法正确进行。

    "Test" 从源类映射到 ["T", "e", "s", "t"] 。当每个类中的属性名称不同时,映射工作正常。

    0 回复  |  直到 4 年前
        1
  •  1
  •   StepUp    4 年前

    我用过:

    • 控制台应用程序
    • .NET 4.6.1
    • 最新稳定 Automapper

    这种行为是不可复制的:

    static MapperConfiguration _conf;
    
    static void Main(string[] args)
    {
        var src = new SourceClass() { Id = Guid.NewGuid(), Provider = "FooProvider" };
        InitializeAutomapper();
        var mapper = _conf.CreateMapper();
        DestinationClass destinationClass = mapper.Map<DestinationClass>(src);
        Console.WriteLine(destinationClass.Provider[0]);
    }
    
    static void InitializeAutomapper()
    {
        _conf = new MapperConfiguration(cfg => 
            cfg.CreateMap<SourceClass, DestinationClass>()
                .ForMember(destinationMember => destinationMember.Provider,
                    memberOptions => memberOptions.MapFrom(src => 
                        new List<string> { src.Provider ?? "" })));
    }
    

    输出:

    FooProvider