格式化映射中的字符串

时间:2018-12-28 18:59:53

标签: c# automapper

我的对象上的字符串值以Markdown格式设置。映射到我的ObjectViewModel类型时,我需要将Markdown格式化为HTML。 据我了解,映射时可以使用ResolverResolveUsing -但是我需要很多不同的字符串属性来完成该过程,并且看来他实现了{{1} }正确地决定不在Resolver处。

CreateMap

这只会映射值。

有什么办法可以针对每个媒体资源做一些特别的事情,例如:

.ForMember(m => m.Description, o => o.MapFrom(f => f.Description))

1 个答案:

答案 0 :(得分:0)

有两种方法可以立即使您想到:

1)ValueConverter

public class MarkDownToHtmlConverter : IValueConverter<string, string>
{
    public string Convert(string sourceMember, ResolutionContext context)
    {
        // Convert to HTML here
        string html = sourceMember;
        return html;
    }
}

cfg.CreateMap<Entity, EntityViewModel>()
    .ForMember(x => x.Description, opt => opt.ConvertUsing(new MarkDownToHtmlConverter()));

2)AfterMap

public class HtmlToMarkdownAction : IMappingAction<Entity, EntityViewModel>
{
    public void Process(Entity source, EntityViewModel destination)
    {
        destination.Description = source.Description; // Convert to HTML
    }
}


cfg.CreateMap<Entity, EntityViewModel>()
    .AfterMap<HtmlToMarkdownAction>();

尽管如此,我的看法是,转换应该在显示时在其他地方进行,例如在Razor中。似乎不是映射器要做这种转换的工作……但这只是我的意见。