C# 自动映射:如果指定类型的源对象为空,则将目标对象的所有属性设置为默认值

C# 自动映射:如果指定类型的源对象为空,则将目标对象的所有属性设置为默认值,c#,automapper,automapper-2,C#,Automapper,Automapper 2,如果指定类的源对象为空,是否可以将AutoMapper配置为将所有属性设置为默认值?我知道我应该使用Mapper.AllowNullDestinationValues=false为应用程序中的所有类执行我想要的操作。 这里是我用于测试的示例代码,但它不起作用 public class A { static A() { Mapper.Initialize( config => {

如果指定类的源对象为空,是否可以将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; }
}

如果设置
Mapper.Configuration.AllowNullDestinationValues=false,则它将替换为null:

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.Configuration.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; }
    }
公共A类
{
静态A()
{
映射器。初始化(
配置=>
{
config.ForSourceType().AllowNullDestinationValues=false;
config.CreateMap()
.ForMember(member=>member.Name,opt=>opt.Ignore());
});
Mapper.Configuration.AllowNullDestinationValues=false;
assertConfigurationsValid();
}
公共无效初始(B)
{
DynamicMap(b,this);
}
公共int?Foo{get;set;}
公共双精度?Foo1{get;set;}
公共bool Foo2{get;set;}
公共字符串名称{get;set;}
}
它必须与已映射的“a”相关

var a = new A {Name = "aName"};
a.Init(b);
a.Init(null);
所有映射都是缓存的,因此如果您试图重新映射同一个实例,自动映射程序只会保留原始结果

要测试它,请尝试:

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

这里有一个类似的问题。

你看到这个问题了吗?:是的,我看到了那个主题,但我认为
Mapper.AllowNullDestinationValues=false
Mapper.Configuration.AllowNullDestinationValues=false你能解释一下这个标志是什么意思吗?我找不到关于它的官方文件。
        var c = new A {Name = "x"};
        c.Init(null);