一旦在模型上硬编码了属性,那么在运行时就很难更改/修改/禁用属性,并且无法删除属性。在您的情况下,即使在Web应用程序中,也不能禁用或删除这些属性。
我给你一个选择,
AutoMapper
,多年来我一直用它来做转换工作,特别是对于MVXX模式,无论是ASP.NET MVC还是WPF MVVM,都需要转换。
view models
到
real models
. automapper按配置应用转换器,但不应用属性,这使您的请求成为可能。
https://github.com/AutoMapper/AutoMapper/blob/master/docs/Custom-type-converters.md
Mapper.Initialize(cfg => {
cfg.CreateMap<ModelA, string>().ConvertUsing(new ModelAToStringTypeConverter());
cfg.CreateMap<ModelA, ModelB>().ConvertUsing(new ModelAToBTypeConverter());
cfg.CreateMap<ModelB, ModelA>().ConvertUsing(new ModelBToATypeConverter());
....
cfg.AddProfile<WpfProfile>();
});
public class WpfProfile: Profile
{
public OrganizationProfile()
{
CreateMap<Foo, FooDto>();
// Use CreateMap... Etc.. here (Profile methods are the same as configuration methods)
}
}
如果modela的属性是modelb的一个子集,您甚至不需要硬编码转换器,
cfg.CreateMap<ModelB, ModelA>()
会自动变魔术。
自动提示
this
:
.NET框架还支持类型转换器的概念,
通过typeconverter类。automapper支持以下类型
类型转换器,在配置检查和映射中,没有
需要任何手动配置。automapper使用
用于确定
可以映射源/目标类型对。