gpt4 book ai didi

c# - 如何使用 AutoMapper 动态映射内部类型

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:43 24 4
gpt4 key购买 nike

我定义了以下四个类

   public class Source
{
public object Value { get; set; }
}

public class Destination
{
public object Value { get; set; }
}

public class SourceDataType
{
//...
}

public class DestinationDataType
{
//...
}

我按如下方式配置了 Automapper:

        AutoMapper.Mapper.CreateMap<Source, Destination>();
AutoMapper.Mapper.CreateMap<SourceDataType, DestinationDataType>();

然后在我的代码中,我创建了一个具有 SourceDateType 值的 Source 对象,并尝试将它映射到一个 Destination 对象。

        var source = new Source { Value = new SourceDataType() };

var destination = AutoMapper.Mapper.Map<Source, Destination>(source);

Console.WriteLine(destination.GetType());
Console.WriteLine(destination.Value.GetType());

目标类型符合预期。我希望 Automapper 能够获取 SourceDataTypeDestinationDataType 之间的映射,并将 SourceDataType 即时映射到DestinationDataType 即时。但是,目标对象被赋予了 SourceDataType 值。

我也试过 DynamicMap,但得到了同样的结果。

        var destination = AutoMapper.Mapper.DynamicMap<Source, Destination>(source);
var destination = AutoMapper.Mapper.DynamicMap<Destination>(source);

有没有办法配置Automapper来动态映射内部类?

最佳答案

这是可以解决的,但如果越来越多的类型被添加到组合中,它将变得难以维护和复杂。无论如何,对于您的情况,这将起作用:

    [Test]
public void CustomMapping()
{
//arrange
Mapper.CreateMap<Source, Destination>()
.ForMember(d=>d.Value, opt=>opt.ResolveUsing(ResolveValue));
Mapper.CreateMap<SourceDataType, DestinationDataType>();

var source = new Source { Value = new SourceDataType() };

//act
var destination = Mapper.Map<Source, Destination>(source);

//assert
destination.Value.Should().Be.OfType<DestinationDataType>();
}

private object ResolveValue(ResolutionResult result)
{
var source = result.Context.SourceValue as Source;

if (result.Context.IsSourceValueNull || source == null || !(source.Value is SourceDataType))
{
return null;
}
var sourceValue = source.Value as SourceDataType;

return result.Context.Engine.Map<DestinationDataType>(sourceValue);
}

关于c# - 如何使用 AutoMapper 动态映射内部类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29490929/

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