C# 域模型与视图模型完全相同时的最佳映射?

C# 域模型与视图模型完全相同时的最佳映射?,c#,asp.net-mvc,linq,automapper,C#,Asp.net Mvc,Linq,Automapper,通过特定的查询扩展到编码实践 …换句话说,当域模型包含与所需viewmodel相同的属性时,什么是最佳映射解决方案 无论出于何种原因,这种情况比我预期的更频繁,可能是因为域模型往往具有多个导航属性。几乎所有的一切都在视图中结束了 是否有自动映射快捷方式、继承策略或Linq表达式来执行直接映射 我已经尝试过一些继承,它很快就会变得奇怪,而Automapper的“命名映射约定”有严重的局限性,特别是对于复杂类型 除了满足数据注释的需要外,我倾向于在视图中使用域模型并在视图中执行验证。因此,缺少映射方

通过特定的查询扩展到编码实践

…换句话说,当域模型包含与所需viewmodel相同的属性时,什么是最佳映射解决方案

无论出于何种原因,这种情况比我预期的更频繁,可能是因为域模型往往具有多个导航属性。几乎所有的一切都在视图中结束了

是否有自动映射快捷方式、继承策略或Linq表达式来执行直接映射

我已经尝试过一些继承,它很快就会变得奇怪,而Automapper的“命名映射约定”有严重的局限性,特别是对于复杂类型


除了满足数据注释的需要外,我倾向于在视图中使用域模型并在视图中执行验证。因此,缺少映射方法促使我使用我并不真正想要的“反模式”进行编码。

这取决于模型的内容,但您可以尝试将对象转换为Json,然后将其转换回目标类型:

    public class SourceEntity
    {
        public string Name { get; set; }
        public DateTime StartDate { get; set; }
    }
    public class TargetEntity
    {
        public string Name { get; set; }
        public DateTime StartDate { get; set; }
    }
    public void Sample()
    {
        SourceEntity sourceEntity = new SourceEntity { Name = "Test name", StartDate = DateTime.Now.AddDays(-3) };
        TargetEntity targetEntity = JObject.FromObject(sourceEntity).ToObject<TargetEntity>();
    }
公共类SourceEntity
{
公共字符串名称{get;set;}
公共日期时间起始日期{get;set;}
}
公共类目标
{
公共字符串名称{get;set;}
公共日期时间起始日期{get;set;}
}
公开作废样本()
{
SourceEntity SourceEntity=newsourceentity{Name=“testname”,StartDate=DateTime.Now.AddDays(-3)};
TargetEntity TargetEntity=JObject.FromObject(sourceEntity).ToObject();
}
您需要将Newtonsoft.Json添加到项目中


这也将转换复杂的属性和子集合,但会与目标类型中的接口和派生类发生冲突。

一个好主意。。。我查看了Newtonsoft.Json的Ajax调用,最终使用了.serialiseArray方法。对.net Json序列化程序的局限性感到惊讶。Newtonsoft是否会“允许”大型类结构?Newtonsoft有其局限性,但根据我的经验,对象大小不是其中之一。“大”有多大?我们对具有数百个字段的结构使用Json,到目前为止还没有发现任何性能问题。顺便说一下,这也将转换“相似”模型。源模型中不存在于目标模型中的任何字段都将被忽略,因此视图模型中的数据可能比域模型中的数据少