【发布时间】:2014-08-11 14:19:51
【问题描述】:
我正在尝试将一个实体映射到另一个具有相似属性的实体,但我希望在我的“目标类型”中有更多字段。 我想映射一个使用源类的空字段的目标值的实体,我不想将所有字段都映射到我的源类型上。
看一下例子:
[TestClass]
public class Example
{
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Foo { get; set; }
}
public class DPerson
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Foo { get; set; }
public bool IsUser { get; set; }
}
[TestMethod]
public void TestNullIgnore()
{
Mapper.CreateMap<Person, DPerson>()
.ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull));
var sourcePerson = new Person
{
FirstName = "Bill",
LastName = "Gates",
};
var destinationPerson = new DPerson
{
FirstName = "",
LastName = "",
Foo = 1,
IsUser = true
};
Mapper.Map(sourcePerson, destinationPerson);
Assert.IsNotNull(destinationPerson);
Assert.AreEqual(1, destinationPerson.Foo);
Assert.AreEqual(true, destinationPerson.IsUser);
}
}
当我在 DPerson 类中添加 IsUser 属性时,AutoMapper 抛出一个奇怪的异常“AutoMapper.AutoMapperMappingException”,并在其消息中说无法映射“Person -> Boolean”。
如果我删除“.ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull))”配置,它可以工作,但我在 Foo 属性中得到“null”。
我为这个问题添加了第一个答案的代码:AutoMapper.Map ignore all Null value properties from source object
谁能帮帮我?
干杯。
【问题讨论】:
标签: c# automapper