C#-所有成员的Automapper规范

在所有字符串类型的属性上使用归一化方法是否有一些简便的方法?

例如,我有两个类:

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映射中的转换.

上一篇:c#-Automapper将int属性值从List映射到List


下一篇:C#-ProjectTo无法识别无参数构造函数