gpt4 book ai didi

c# - AutoMapper:如果指定类型的源对象为空,则将目标对象的所有属性设置为默认值

转载 作者:行者123 更新时间:2023-11-30 12:49:06 26 4
gpt4 key购买 nike

如果指定类的源对象为空,是否可以配置 AutoMapper 将所有属性设置为默认值?我知道我应该使用 Mapper.AllowNullDestinationValues = false; 对应用程序中的所有类执行我想要的操作。这是我用于测试的示例代码,但它不起作用

public class A
{
static A()
{
Mapper.Initialize(
config =>
{
config.ForSourceType<B>().AllowNullDestinationValues = false;
config.CreateMap<B, A>()
.ForMember(member => member.Name, opt => opt.Ignore());
});
//Mapper.AllowNullDestinationValues = false;

Mapper.AssertConfigurationIsValid();
}

public void Init(B b)
{
Mapper.DynamicMap(b, this);
}

public int? Foo { get; set; }
public double? Foo1 { get; set; }
public bool Foo2 { get; set; }
public string Name { get; set; }
}

public class B
{
public string Name { get; set; }
public int? Foo { get; set; }
public double? Foo1 { get; set; }
public bool Foo2 { get; set; }
}

使用此代码:

var b = new B() {Foo = 1, Foo1 = 3.3, Foo2 = true, Name = "123"};
var a = new A {Name = "aName"};
a.Init(b); // All ok: Name=aName, Foo=1, Foo1=3,3, Foo2=True
a.Init(null); // Should be Name=aName, Foo=null, Foo1=null, Foo2=False,
// but a has the same values as on a previous line

最佳答案

它必须与已经映射的“a”相关。

var a = new A {Name = "aName"};
a.Init(b);
a.Init(null);

所有映射都被缓存,因此如果您尝试重新映射同一实例,自动映射器将只保留原始结果。

为了测试它,尝试:

        var c = new A {Name = "x"};
c.Init(null);

这是一个link类似的问题。

关于c# - AutoMapper:如果指定类型的源对象为空,则将目标对象的所有属性设置为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12512817/

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