AutoMapper – 使用相同的源和目标对象类型映射
我正在使用Automapper来获取两个相同类型的对象,并映射已更改的任何新值。 我尝试使用下面的代码,但它不断抛出错误,我甚至不确定这是否可以通过Automapper实现。
例如:
Mapper.CreateMap(); UserDetails userDetails = Mapper.Map(userDetailsCurrent, userDetailsNew);
基本上,我需要将来自新对象“userDetailsNew”的任何新值复制到现有对象“userDetailsCurrent” – 即使它们属于同一类型。 这样我就可以用新值“更新”现有对象。 我这样做的原因是因为我不确定将传递哪些用户详细信息 – 我需要在它们到达时映射它们。
我通常使用Automapper来映射具有相似属性的不同对象 – 但我认为我可以利用Automapper的强大function以这种方式实现相同的function。 甚至可能有更好的解决方案 – 任何帮助将不胜感激!
这似乎对我有用。 我的自定义类型:
class MyType { public int MyInt { get; set; } public string MyString { get; set; } }
我的映射代码:
Mapper.CreateMap(); var source = new MyType() {MyInt = 1, MyString = "Hello world"}; var dest = Mapper.Map(source);
除了简单属性之外,您的自定义类型有什么意义?
这可以使用元组和创建从Automapper的Abstract TypeConverter类派生的自定义类型转换器来完成。
假设您有源和目标类:
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public override string ToString() { return string.Format("Firstname: {0}, Lastname: {1}", FirstName, LastName); } }
然后你可以构建自定义转换器类型
public class CustomerPersonConverter : TypeConverter, Person> { protected override Person ConvertCore(Tuple source) { var orginalValues = source.Item1; var updatedValues = source.Item2; var result = new Person { FirstName = string.IsNullOrEmpty(updatedValues.FirstName) ? orginalValues.FirstName : updatedValues.FirstName, LastName = string.IsNullOrEmpty(updatedValues.LastName) ? orginalValues.LastName : updatedValues.LastName }; return result; } }
可以像
var orginal = new Person() {FirstName = "Clifford", LastName = "Mayson"}; var updated = new Person() {FirstName = "Cliff"}; Mapper.CreateMap, Person>().ConvertUsing(); var result = Mapper.Map(new Tuple(orginal, updated)); Console.WriteLine(result);
这将产生保持原始姓氏值的结果,因为更新中缺少原始姓氏值,但更新免费精选名字大全值,例如。
上述就是C#学习教程:AutoMapper – 使用相同的源和目标对象类型映射分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
Firstname: Cliff, Lastname: Mayson
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1015137.html