我正在使用AutoMapper将DTO映射到实体.另外,我的WCF服务正在被SAP使用.
问题是SAP向我发送了空字符串而不是空值(即“”而不是空值).
因此,我基本上需要遍历接收到的DTO的每个字段,并将空字符串替换为null.有没有简单的方法可以使用AutoMapper完成此操作?
解决方法:
取决于您要执行的操作-如果有一些字符串字段要保留空字符串而不转换为null,或者要威胁所有相同.提供的解决方案是如果您需要同样威胁它们.如果要指定应进行空到空转换的单个属性,请使用ForMemeber()而不是ForAllMembers.
转换所有解决方案:
namespace *
{
using AutoMapper;
using SharpTestsEx;
using NUnit.Framework;
[TestFixture]
public class MapperTest
{
public class Dto
{
public int Int { get; set; }
public string StrEmpty { get; set; }
public string StrNull { get; set; }
public string StrAny { get; set; }
}
public class Model
{
public int Int { get; set; }
public string StrEmpty { get; set; }
public string StrNull { get; set; }
public string StrAny { get; set; }
}
[Test]
public void MapWithNulls()
{
var dto = new Dto
{
Int = 100,
StrNull = null,
StrEmpty = string.Empty,
StrAny = "any"
};
Mapper.CreateMap<Dto, Model>()
.ForAllMembers(m => m.Condition(ctx =>
ctx.SourceType != typeof (string)
|| ctx.SourceValue != string.Empty));
var model = Mapper.Map<Dto, Model>(dto);
model.Satisfy(m =>
m.Int == dto.Int
&& m.StrNull == null
&& m.StrEmpty == null
&& m.StrAny == dto.StrAny);
}
}
}