Automapper:将类型对象上的单个成员映射到对象的 Icollection
Automapper: mapping a single member on type object to Icollection of object
我正在尝试将单个对象映射到一个字段,该字段是使用自动映射器的对象的 ICollection,示例布局就是这样...
public class BarDto {
public int id {get;set;}
public int name {get;set;}
public ICollection<ExampleObject> FooCollection {get;set;}
}
public class Bar {
public int id {get;set;}
public int name {get;set;}
public ExampleObject Foo {get;set;}
}
Mapper.CreateMap<BarDto, Bar>()
.ForMember(dest => dest.FooCollection, opts => opts.MapFrom(src => src.Foo));
是否可以将 src.foo 转换为列表等以被接受为 ICollection?
您可以执行以下操作:
Mapper.CreateMap<Bar, BarDto>()
.ForMember(dest => dest.FooCollection, opts => opts.MapFrom(src => new List<ExampleObject>() { src.Foo } ));
或者你可以自己实现ValueResolver<ExampleObject, List<ExampleObject>>
并做类似的事情:
public class ExampleResolver: ValueResolver<ExampleObject, List<ExampleObject>>
{
protected override List<ExampleObject> ResolveCore(ExampleObject source)
{
return new List<ExampleObject>() { source };
}
}
然后:
Mapper.CreateMap<BarDto, Bar>()
.ForMember(dest => dest.FooCollection, opts => opts.ResolveUsing<ExampleResolver>());
第二种方法通常用于更复杂的情况,但您可以select任何您想要的方法。
希望对您有帮助。
我正在尝试将单个对象映射到一个字段,该字段是使用自动映射器的对象的 ICollection,示例布局就是这样...
public class BarDto {
public int id {get;set;}
public int name {get;set;}
public ICollection<ExampleObject> FooCollection {get;set;}
}
public class Bar {
public int id {get;set;}
public int name {get;set;}
public ExampleObject Foo {get;set;}
}
Mapper.CreateMap<BarDto, Bar>()
.ForMember(dest => dest.FooCollection, opts => opts.MapFrom(src => src.Foo));
是否可以将 src.foo 转换为列表等以被接受为 ICollection?
您可以执行以下操作:
Mapper.CreateMap<Bar, BarDto>()
.ForMember(dest => dest.FooCollection, opts => opts.MapFrom(src => new List<ExampleObject>() { src.Foo } ));
或者你可以自己实现ValueResolver<ExampleObject, List<ExampleObject>>
并做类似的事情:
public class ExampleResolver: ValueResolver<ExampleObject, List<ExampleObject>>
{
protected override List<ExampleObject> ResolveCore(ExampleObject source)
{
return new List<ExampleObject>() { source };
}
}
然后:
Mapper.CreateMap<BarDto, Bar>()
.ForMember(dest => dest.FooCollection, opts => opts.ResolveUsing<ExampleResolver>());
第二种方法通常用于更复杂的情况,但您可以select任何您想要的方法。
希望对您有帮助。