在所有字符串类型的属性上使用归一化方法是否有一些简便的方法?
例如,我有两个类:
public class Text
{
public string Header { get; set; }
public string Content { get; set; }
}
public class TextSource
{
public string Header { get; set; }
public string Content { get; set; }
}
我希望他们映射:
[TestMethod]
public void ShouldMapTextSourceToText()
{
var TextSource = new TextSource()
{
Content = "<![CDATA[Content]]>",
Header = "<![CDATA[Header]]>",
};
Mapper.Initialize(cfg => cfg.CreateMap<TextSource, Text>()
.ForMember(dest => dest.Content, opt => opt.MapFrom(s => s.Content.Normalize()))
.ForMember(dest => dest.Header, opt => opt.MapFrom(s => s.Header.Normalize())));
var text = Mapper.Map<Text>(TextSource);
Assert.AreEqual("Content", text.Content);
Assert.AreEqual("Header", text.Header);
}
除了可以为每个属性分别配置规范化方法之外,还可以对所有属性执行一次吗?
解决方法:
是的,您将使用custom type converter:
Mapper.Initialize(cfg => {
cfg.CreateMap<TextSource, Text>();
cfg.CreateMap<string, string>().ConvertUsing(s => s.Normalize());
});
这告诉AutoMapper,只要将字符串映射到字符串,就应应用Normalize()方法.
请注意,这将适用于所有字符串转换,而不仅仅是TextSource到Text映射中的转换.