繁体   English   中英

Automapper 忽略 null 值,但对 null 执行 map 空字符串

[英]Automapper ignore null values but do map empty string to null

我们正在使用自动映射器。 我想 map 两个相同类型的对象。 当源成员值 = null 时,应使用目标成员。 但是,当源成员值为空字符串 ("") 时,我希望目标成员变为 null。 这是一个示例代码:

        public class someobject
        {
            public string text { get; set; }
        }

        [TestMethod]
        public void EmptyStringMap()
        {
            var cfg = new MapperConfiguration(c => c.CreateMap<someobject, someobject>()
                .AddTransform<string>(s => string.IsNullOrEmpty(s) ? null : s)
                .ForAllOtherMembers(o =>
                    o.Condition((src, dest, srcmember) => srcmember != null)));

            var map = cfg.CreateMapper();

            var desto = new someobject() { text = "not empty" };
            var srco = new someobject() { text = "" };

            var mappedo = map.Map(srco, desto);
            Assert.IsNull(mappedo.text);

        }

然而,这将失败。 mappedo.text 将“不为空”。 当源成员为空字符串时,您有什么建议如何实现字符串类型的所有成员成为 null ?

改变条件就可以解决问题:

        public class someobject
        {
            public string text { get; set; }
        }

        [TestMethod]
        public void EmptyStringMap()
        {
            var cfg = new MapperConfiguration(c => {
                c.CreateMap<someobject, someobject>()
                .AddTransform<string>(s => string.IsNullOrEmpty(s) ? null : s)
                .ForAllOtherMembers(o =>
                    o.Condition((src, dest, srcmember, destmember) => srcmember != null || destmember.GetType() == typeof(string)));
                });

            var map = cfg.CreateMapper();

            var desto = new someobject() { text = "not empty" };
            var srco = new someobject() { text = "" };
            //var srco = new someobject() { text = null };

            var mappedo = map.Map(srco, desto);
            Assert.IsNull(mappedo.text);

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM