AutoMapper和扁平化嵌套数组我正在尝试使用AutoMapper来压缩多级数组。考虑以下源类:classX{publicstringA{get;放;}publicY[]B{得到;放;}}类Y{公共字符串C{得到;放;}publicZ[]D{得到;放;}}类Z{公共字符串E{得到;放;}公共字符串F{得到;放;}}以下目的地:classDestination{publicstringA{get;放;}公共字符串C{得到;放;}公共字符串E{得到;放;}公共字符串F{得到;放;我想要做的是从一个或多个X中获取一个列表,例如:Mapper.Map(arrayOfX);无法弄清楚要使用哪种类型的映射配置来实现此目的。MapFrom似乎是进行1:1组合的方式,但似乎无法处理数组(或其他可枚举),除非我使用AutoMapper的目标命名约定。关于如何实现这一目标的任何见解?试试这个映射器Mapper.CreateMap();映射器.CreateMap();Mapper.CreateMap().ForMember(目的地=>目的地.A,选项=>options.MapFrom(源=>来源.A)).IgnoreAllNonExisting().ForMember(目的地=>目的地.C,选项=>options.MapFrom(source=>Mapper.Map,IEnumerable>(source.B).FirstOrDefault().C)).ForMember(destination=>destination.E,options=>options.MapFrom(source=>Mapper.Map,IEnumerable>(source.B.SelectMany(d=>dD)).FirstOrDefault().E)).ForMember(destination=>destination.F,options=>options.MapFrom(source=>Mapper.Map,IEnumerable>(source.B.SelectMany(d=>dD)).FirstOrDefault().F));varresult=Mapper.Map,IEnumerable>(arrayOfX);我刚才有一个非常相似的问题。我有一系列地点,每个地点都有一系列街道。我想将它们映射到一组视图模型,其中每个视图模型代表一条街道(包括位置详细信息)。这是我的解决方案:https://groups.google.com/forum/#!topic/automapper-users/b66c1M8eS8E对于这个特定问题,这可能是您的映射配置:.Ignore()).ForMember(dest=>dest.C,opt=>opt.Ignore());Mapper.CreateMap().ForMember(dest=>dest.A,opt=>opt.Ignore()).ForMember(dest=>dest.E,opt=>opt.Ignore()).ForMember(dest=>dest.F,opt=>opt.Ignore());Mapper.CreateMap().ForMember(dest=>dest.C,opt=>opt.Ignore()).ForMember(dest=>dest.E,opt=>opt.Ignore()).ForMember(dest=>dest.F,opt=>opt.Ignore());由于AutoMapper主要是1:1映射,因此您需要实现一点魔法来映射到多个对象。下面是一个如何调用映射来填充对象的示例:varrc=data.SelectMany(x=>xBSelectMany(y=>yD.Select(Mapper.Map).Select(z=>Mapper.Map(y,z))).Select(y=>Mapper.Map(x,y)));下面是一些单元测试,验证地图并在行动中显示它:以上是C#学习教程:AutoMapper和FlatteningNestedArrays如果分享的所有内容对你有用,你需要进一步了解C#学习教程,我希望你会更加关注——[TestFixture]publicclassMapperTests{[Test]publicvoidMapping_Configuration_IsValid(){AutoMapperConfig.Configure();映射器。AssertConfigurationIsValid();}[测试]publicvoidMapping_TestItems_MappedOK(){AutoMapperConfig.Configure();映射器.AssertConfigurationIsValid();vardata=new[]{newX{A="A1",B=new[]{newY{C="A1C1",D=new[]{newZ{E="A1C1E1",F="A1C1F1"},newZ{E="A1C1E2",F="A1C1F2"},}},newY{C="A1C2",D=new[]{newZ{E="A1C2E1",F="A1C2F1"},newZ{E="A1C2E2",F="A1C2F2"},}}}}};varrc=data.SelectMany(x=>xBSelectMany(y=>yD.Select(Mapper.Map).Select(z=>Mapper.Map(y,z))).Select(y=>Mapper.Map(x,y)));Assert.That(rc,Is.Not.Null);Assert.That(rc.Count(),Is.EqualTo(4));var项目=rc.FirstOrDefault(x=>xF=="A1C2F2");Assert.That(item,Is.Not.Null);Assert.That(item.A,Is.EqualTo("A1"));Assert.That(item.C,Is.EqualTo("A1C2"));Assert.That(item.E,Is.EqualTo("A1C2E2"));Assert.That(item.F,Is.EqualTo("A1C2F2"));}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: