Automapper如何与C#属性一起使用

3

我有两个对象,我想使用AutoMapper属性将它们进行映射,这些是我的目标对象:

public class ClaseB
{
    public string UBLVersionID_nuevo { get; set; }

    public ClaseB_inside objetoB_inside { get; set; }
}

public class ClaseB_inside
{
    public string texto_inside { get; set; }
}

这是我的源类:

[MapsTo(typeof(ClaseB))]
public class ClaseA
{
    [MapsToProperty(typeof(ClaseB), "objetoB_inside.texto_inside")]
    public string texto { get; set; } = "texto prueba";

    [MapsToProperty(typeof(ClaseB), "UBLVersionID_nuevo")]
    public string texto2 { get; set; } = "texto 2 de prueba";
}

当我尝试进行映射时,出现以下错误:

类型映射错误

通过这个更改:

[MapsTo(typeof(ClaseB))]
public class ClaseA
{
    [MapsToProperty(typeof(ClaseB_inside), "objetoB_inside.texto_inside")]
    public string texto { get; set; } = "texto prueba";

    [MapsToProperty(typeof(ClaseB), "UBLVersionID_nuevo")]
    public string texto2 { get; set; } = "texto 2 de prueba";
}

ClaseB.objetoB_inside中我得到了null,但是ClaseB.UBLVersionID_nuevo可以工作。

我做错了什么?

1个回答

1
我认为问题出在你定义映射的方式上。如果你没有使用Automapper属性并通过静态API进行初始化,那么请考虑以下内容:
        Mapper.Initialize(expression =>
        {
            expression.CreateMap<ClaseA, ClaseB>()
                .ForMember(
                    from => from.objetoB_inside.texto_inside, 
                    to => to.MapFrom(a => a.texto2));
        });

这个映射会导致以下异常: 表达式 'from => from.objetoB_inside.texto_inside' 必须解析为顶级成员而不是任何子对象的属性。在子类型上使用自定义解析器或AfterMap选项。 我认为属性定义也存在同样的问题。
因此,我建议实现以下内容:
public class MapsToClaseB : MapsToAttribute
{
    public MapsToClaseB() : base(typeof(ClaseB)) { }

    public void ConfigureMapping(IMappingExpression<ClaseA, ClaseB> mappingExpression)
    {
        mappingExpression.AfterMap(
            (a, b) => b.objetoB_inside = new ClaseB_inside{texto_inside = a.texto});
    }
}

您只需要使用以下代码装饰您的类:

[MapsToClaseB]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接