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