CodeGo.net>用AutoMapper的空字符串替换为空

我正在使用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);
        }
    }
}
上一篇:[转载]AutoMapper 9.0的改造


下一篇:升级到自动映射器3后缺少方法