我在不同的命名空间中有两个相同的类:
namespace ClassLibrary1
class Class1
{
public readonly int field1;
public Class1(int value) { field1 = value; }
}
Run Code Online (Sandbox Code Playgroud)
和命名空间中的相同类定义ClassLibrary2.
当我尝试使用AutoMapper时,我得到以下异常:
表达式必须是可写的参数名称:left
这是AutoMapper的代码:
Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>();
var result = Mapper.Map<ClassLibrary2.Class1>(class1);
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用此AutoMapper排除字段它不起作用,使用此:
Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>()
.ForMember(a => a.field1, a => a.Ignore());
Run Code Online (Sandbox Code Playgroud)
当然,它可以将它更改为具有公共get和private设置的属性(比如在Automapper中忽略readonly属性),但我想阻止将来的开发人员在构造函数之后设置值.
有没有办法使用AutoMapper解决这个问题?
如果您想在构造函数中设置属性,请使用.ConstructUsing然后忽略该字段:
Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>()
.ConstructUsing(cls1 => new ClassLibrary2.Class1(cls1.field1))
.ForMember(a => a.field1, a => a.Ignore());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2951 次 |
| 最近记录: |