ASP.NET MVC API中如何快速将列表赋值给DevelopmentsClass?
嘿,我来给你几个高效的方案,不用重写一堆代码就能快速把developments实例赋值给DevelopmentsClass对象:
方案1:用对象映射库(推荐,最省心)
像AutoMapper这种成熟的对象映射库是最优解,只需要一次配置,后续就能一键完成映射,完全不用手动写赋值代码:
首先安装AutoMapper NuGet包:
Install-Package AutoMapper
然后在项目启动时(比如Program.cs或者Startup.cs)配置一次映射关系:
var mapperConfig = new MapperConfiguration(cfg => { // 配置从你的原始developments类型到DevelopmentsClass的映射 cfg.CreateMap<YourOriginalDevelopmentsType, DevelopmentsClass>(); }); // 全局注入或者直接实例化 IMapper mapper = mapperConfig.CreateMapper();
之后在控制器里直接调用映射:
// 把developments转换成DevelopmentsClass实例 DevelopmentsClass targetInstance = mapper.Map<DevelopmentsClass>(developments);
AutoMapper会自动匹配同名同类型的属性,就算你调整了XmlRoot特性,只要属性结构没大改,这个方法完全适用。
方案2:用反射写通用映射方法(无第三方依赖)
如果不想引入外部库,可以自己写一个基于反射的通用扩展方法,一次性解决所有同结构对象的赋值问题:
public static class ObjectMappingExtensions { public static TTarget MapTo<TTarget>(this object source) where TTarget : new() { if (source == null) return default; var target = new TTarget(); var sourceProperties = source.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); var targetProperties = typeof(TTarget).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (var sourceProp in sourceProperties) { // 匹配同名同类型的可写属性 var targetProp = targetProperties.FirstOrDefault(p => p.Name.Equals(sourceProp.Name, StringComparison.OrdinalIgnoreCase) && p.PropertyType == sourceProp.PropertyType && p.CanWrite); if (targetProp != null) { targetProp.SetValue(target, sourceProp.GetValue(source)); } } return target; } }
然后在控制器里直接用扩展方法:
DevelopmentsClass targetInstance = developments.MapTo<DevelopmentsClass>();
这个方法适合轻量场景,不用加任何依赖,而且可以复用在其他对象映射上。
方案3:简化手动初始化(属性少的情况)
如果你的类属性不多,或者只有少数属性需要调整,可以用VS的快速生成功能来减少手动代码:
右键点击初始化器的大括号内部 -> 选择「快速操作和重构」-> 「生成字段/属性初始化器」,VS会自动帮你把所有同名属性的赋值代码补全:
DevelopmentsClass targetInstance = new DevelopmentsClass { // VS会自动生成类似下面的代码 DevelopmentId = developments.DevelopmentId, Name = developments.Name, Description = developments.Description // ... 其他属性 };
这种方法虽然需要手动确认,但胜在直观,适合属性数量不多的场景。
内容的提问来源于stack exchange,提问作者user979331
相关产品推荐
相关产品推荐

