Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射-使用命名约定映射复杂对象,而不提供内部映射_C#_Automapper - Fatal编程技术网

C# 自动映射-使用命名约定映射复杂对象,而不提供内部映射

C# 自动映射-使用命名约定映射复杂对象,而不提供内部映射,c#,automapper,C#,Automapper,我有两个属性完全相同的复杂对象 现在使用AutoMapper,我通常需要执行以下操作: Mapper.CreateMap<ObjA, ObjB>(); Mapper.CreateFullMapOnIdenticalObjectsWithInnerTypes<ObjA, ObjB>(); 编辑: 下面是一个例子: 两个具有不同命名空间的相同类: namespace NameSpace1 { public class Obj1 { pub

我有两个属性完全相同的复杂对象

现在使用
AutoMapper
,我通常需要执行以下操作:

Mapper.CreateMap<ObjA, ObjB>();
 Mapper.CreateFullMapOnIdenticalObjectsWithInnerTypes<ObjA, ObjB>();
编辑:

下面是一个例子:

两个具有不同命名空间的相同类:

namespace NameSpace1
{
    public class Obj1
    {
        public string Str { get; set; }
        public int Num { get; set; }
        public InnerObj1 InnerObj1 { get; set; }
    }

    public class InnerObj1
    {
        public string StrInner1 { get; set; }
        public int NumInner1 { get; set; }

        public AnotherInnerObj1 AnotherInnerObj1 { get; set; }
    }

    public class AnotherInnerObj1
    {
        public string Str { get; set; }
    }
}

namespace NameSpace2
{
    public class Obj1
    {
        public string Str { get; set; }
        public int Num { get; set; }
        public InnerObj1 InnerObj1 { get; set; }
    }

    public class InnerObj1
    {
        public string StrInner1 { get; set; }
        public int NumInner1 { get; set; }

        public AnotherInnerObj1 AnotherInnerObj1 { get; set; }
    }

    public class AnotherInnerObj1
    {
        public string Str { get; set; }
    }
}
创建一个模拟的
名称空间1.Obj1

        public static NameSpace1.Obj1 Create()
        {
            return new NameSpace1.Obj1
            {
                Num = 10,
                Str = "Obj1",
                InnerObj1 = new NameSpace1.InnerObj1
                {
                    NumInner1 = 11,
                    StrInner1 = "InnerObj1",
                    AnotherInnerObj1 = new NameSpace1.AnotherInnerObj1
                    {
                        Str = "AnotherInnerObj1"
                    }
                }
            };
        }
这就是我想要的:

    Mapper.CreateMap<NameSpace1.Obj1, NameSpace2.Obj1>();
    var obj1 = Create();
    var obj2 = Mapper.Map<NameSpace2.Obj1>(obj1);
Mapper.CreateMap();
var obj1=Create();
var obj2=Mapper.Map(obj1);
但这会引发异常,因为我需要定义内部映射。这将有助于:

    Mapper.CreateMap<NameSpace1.Obj1, NameSpace2.Obj1>();
    Mapper.CreateMap<NameSpace1.InnerObj1, NameSpace2.InnerObj1>();
    Mapper.CreateMap<NameSpace1.AnotherInnerObj1, NameSpace2.AnotherInnerObj1>();
    var obj1 = Create();
    var obj2 = Mapper.Map<NameSpace2.Obj1>(obj1);
Mapper.CreateMap();
CreateMap();
CreateMap();
var obj1=Create();
var obj2=Mapper.Map(obj1);

您的意思是,当objA展开时,您不想继续向objB添加新的内部属性吗?不。。这两个对象将是相同的。我不想在将来的属性上添加映射..但是如果两个对象都相同,这意味着它们都有相同的属性和相同的属性类型,所以将objectA映射到objectB就足够了,因为automapper将使用反射来匹配属性。它会一直工作,直到他得到一个复杂的方法,然后他需要内部映射。你能告诉我们automapper需要内部映射来映射的情况吗?将类定义添加到问题中。
    Mapper.CreateMap<NameSpace1.Obj1, NameSpace2.Obj1>();
    Mapper.CreateMap<NameSpace1.InnerObj1, NameSpace2.InnerObj1>();
    Mapper.CreateMap<NameSpace1.AnotherInnerObj1, NameSpace2.AnotherInnerObj1>();
    var obj1 = Create();
    var obj2 = Mapper.Map<NameSpace2.Obj1>(obj1);