Mapping dictionaries with AutoMapper

后端 未结 2 1885
名媛妹妹
名媛妹妹 2020-12-03 14:03

Given this these classes, how can I map a dictionary of them?

public class TestClass
{
    public string Name { get; s         


        
2条回答
  •  自闭症患者
    2020-12-03 14:29

    The problem you are having is because AutoMapper is struggling to map the contents of the Dictionary. You have to think what it is a store of - in this case KeyValuePairs.

    If you try create a mapper for the KeyValuePair combination you will quickly work out that you can't directly as the Key property doesn't have a setter.

    AutoMapper gets around this though by allowing you to Map using the constructor.

    /* Create the map for the base object - be explicit for good readability */
    Mapper.CreateMap()
          .ForMember( x => x.Name, o => o.MapFrom( y => y.Name ) );
    
    /* Create the map using construct using rather than ForMember */
    Mapper.CreateMap, KeyValuePair>()
          .ConstructUsing( x => new KeyValuePair( x.Key, 
                                                                        x.Value.MapTo() ) );
    
    var testDict = new Dictionary();
    var testValue = new TestClass()
    {
        Name = "value1"
    };
    testDict.Add( "key1", testValue );
    
    /* Mapped Dict will have your new KeyValuePair in there */
    var mappedDict = Mapper.Map,
    Dictionary>( testDict );
    

提交回复
热议问题