gpt4 book ai didi

c# - automapper 使用属性 c#

转载 作者:太空宇宙 更新时间:2023-11-03 14:58:22 25 4
gpt4 key购买 nike

我有两个对象,我想使用 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";
}

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

Error mapping types

有了这个改变:

[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 中得到 nullClaseB.UBLVersionID_nuevo 它有效。

我做错了什么?

最佳答案

我认为问题在于您定义映射的方式。如果您没有使用 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]

关于c# - automapper 使用属性 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47662907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com