c# – 如何配置Automapper 4以允许空目标值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何配置Automapper 4以允许空目标值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1746字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何配置Automapper 4以允许空目标值](/upload/InfoBanner/zyjiaocheng/767/4dedce64f36b40be8170630afefdbe5f.jpg)
我在解决如何使Automapper 4.2.1允许类型映射时遇到一些问题,其中目标值可能为null,具体取决于源值.
较旧版本的Automapper允许通过Mapper配置设置AllowNullDestination标志,但是我找不到新版本的等效配方,并且通过静态Mapper对象配置的旧机制似乎已经过时.
我试过以下没有成功:
> Mapper.Configuration.AllowNullDestinationValues = true;
> Mapper.AllowNullDestinationValues = true;
> Mapper.Initialize(c => c.AllowNullDestinationValues = true);
这是一个简单的测试案例,展示了这个问题.由于Substitute方法返回null,因此在AutoMapperMappingException的最后一行失败.我希望两个映射都能成功.
我宁愿避免在解决方案中使用.ForMember,因为在我试图解决的真实场景中,bool和’object'(实际上是一个自定义类)之间的映射应该应用于整个对象树.
虽然StackOverflow上有几个类似的问题,但我还没有找到一个引用最新版Automapper的问题.
在此先感谢您的任何建议
using AutoMapper;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace AutoMapperTest
{
[TestClass]
public class ExampleTest
{
[TestMethod]
public void NullDestinationCanBeMapped()
{
var mapper = new MapperConfiguration(configuration =>
{
configuration.CreateMap<Source, Target>();
//How should the following mapping be modified to pass the test?
configuration.CreateMap<bool, object>()
.Substitute(i => i ? null : new object());
}).CreateMapper();
var target1 = mapper.Map<Source, Target>(new Source {Member = false}); //succeeds
Assert.IsNotNull(target1.Member); //pass
var target2 = mapper.Map<Source, Target>(new Source {Member = true}); //fails to map with exception
Assert.IsNull(target2.Member); //not reached
}
}
public class Source
{
public bool Member { get; set; }
}
public class Target
{
public object Member { get; set; }
}
}
解决方法:
而不是使用替换,使用ConvertUsing …
configuration.CreateMap<bool, MyClass>()
.ConvertUsing(i => i ? null : new object());
内容总结
以上是互联网集市为您收集整理的c# – 如何配置Automapper 4以允许空目标值全部内容,希望文章能够帮你解决c# – 如何配置Automapper 4以允许空目标值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。