使用Automapper映射只读字段

本文关键字:读字段 映射 Automapper 使用 | 更新日期: 2023-09-27 18:20:28

我在不同的命名空间中有两个相同的类:

namespace ClassLibrary1
class Class1
{
    public readonly int field1;
    public Class1(int value) { field1 = value; }
}

和命名空间ClassLibrary2中的相同类定义。

当我尝试使用AutoMapper时,我会得到以下异常:

表达式必须是可写的参数名称:左

这是AutoMapper的代码:

Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>();
var result = Mapper.Map<ClassLibrary2.Class1>(class1);

但如果我尝试这个AutoMapper排除字段,它不起作用,使用这个:

Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>()
    .ForMember(a => a.field1, a => a.Ignore());

当然,将其更改为具有public get和private set的属性(如在Automapper中忽略只读属性)是可行的,但我想防止未来的开发人员在构造函数之后设置值。

有没有任何方法可以使用AutoMapper解决这个问题?

使用Automapper映射只读字段

如果您想在构造函数中设置属性,请使用.ConstructUsing,然后忽略字段:

Mapper.CreateMap<ClassLibrary1.Class1, ClassLibrary2.Class1>()
    .ConstructUsing(cls1 => new ClassLibrary2.Class1(cls1.field1))
    .ForMember(a => a.field1, a => a.Ignore());