C# 使用automapper将string类型列表映射到具有string属性的对象列表
这是我的设想。我有一个类Class1,其属性类型为string[]C# 使用automapper将string类型列表映射到具有string属性的对象列表,c#,automapper,C#,Automapper,这是我的设想。我有一个类Class1,其属性类型为string[] Class Class1 { string[] strings{ get; set;} } 我想将列表中的每个字符串映射到MyClass类型列表中的字符串属性 Class MyClass { string someString { get; set;] } 所以,使用automapper它会是这样的 Mapper.CreateMap<Class1, IEnumerable<MyClass>&
Class Class1
{
string[] strings{ get; set;}
}
我想将列表中的每个字符串映射到MyClass类型列表中的字符串属性
Class MyClass
{
string someString { get; set;]
}
所以,使用automapper它会是这样的
Mapper.CreateMap<Class1, IEnumerable<MyClass>>().ForMember(dest => dest.someString, opts => opts.MapFrom(src => src.strings));
Mapper.CreateMap().formMember(dest=>dest.someString,opts=>opts.MapFrom(src=>src.strings));
我知道这不管用,但我想应该是这个清单上的东西。
我真的不知道该从这里走到哪里,或者是否可能,我们非常感谢您的帮助。有几种方法可以实现这一点:
ConstructUsing
和一些LINQ:
Mapper.CreateMap<Class1, IEnumerable<MyClass>>()
.ConstructUsing(
src => src.strings.Select(str => new MyClass { someString = str }));
string[]
属性,目标类中有多个相应的string
属性,则可以执行以下操作:
Mapper.CreateMap<Class1, IEnumerable<MyClass>>()
.ConstructUsing(
src => src.strings
.Zip(src.strings2, (str1, str2) => new { str1, str2 })
.Zip(src.strings3, (res1, str3) =>
new MyClass
{
someString = res1.str1,
someString2 = res1.str2,
someString3 = str3
}));
Mapper.CreateMap()
.施工(
src=>src.strings
.Zip(src.strings2,(str1,str2)=>new{str1,str2})
.Zip(src.strings3,(res1,str3)=>
新MyClass
{
someString=res1.str1,
someString2=res1.str2,
someString3=str3
}));
基本上,您可以多次调用
.Zip
。这假设每个数组的所有索引都匹配,并且每个数组中的元素数都相同。@Chris:没问题,很高兴我能提供帮助。作为跟进,对于同一类中的多个属性,您将如何做到这一点?在源或目标中?如果你更新你的问题,我很乐意看一看源class1,它包含n个string[]类型的属性,我想把它们映射到一个MyClass列表中,该列表包含n个string类型的属性。我用一个自定义的解析器解决了这个问题,但我觉得不用这样做也可以做到。@Chris:我更新了我的答案。如果属性的数量很大,您可能需要查看自定义解析器
Mapper.CreateMap<Class1, IEnumerable<MyClass>>()
.ConstructUsing(
src => src.strings
.Zip(src.strings2, (str1, str2) => new { str1, str2 })
.Zip(src.strings3, (res1, str3) =>
new MyClass
{
someString = res1.str1,
someString2 = res1.str2,
someString3 = str3
}));