在不同命名空间内的相同结构之间转换值.C#

log*_*eks 4 .net c# namespaces

我在不同的命名空间中有两个相似的[所有属性相同.]结构.

现在,当我尝试在这些结构的对象之间复制值时,我遇到了错误.

如何才能在驻留在不同命名空间中的两个相似结构的对象之间复制值?

提前致谢.

问候,

约翰

Jon*_*eet 7

您不能自动使用框架的内置转换.

短名称(在命名空间IE)是完全不相关的在这里-至于CLR而言,A.B.C.SomeTypeA.B.C1.SomeType是为不同的X.Y.FooA.B.Bar.

您应该编写自己的转换例程,或者(最好)首先避免使用两种不同的类型,如果它们做同样的事情.或者,您可以使用基于反射的方法来执行转换......但是仍然没有让运行时执行此操作.


Ali*_*tad 5

使用AutoMapper.

Mapper.CreateMap<My.NS1.Structure, My.NS2.Structure>();
My.NS1.Structure struct1;
My.NS2.Structure struct2 = (My.NS2.Structure) Mapper.Map(struct1);
Run Code Online (Sandbox Code Playgroud)


Tha*_*Guy 5

当通过WCF从外部提供程序使用多个Web服务时,我遇到了同样的问题.有一个非常大的嵌套对象树,这对于在类之间进行映射非常痛苦,特别是因为这个树有几个将抽象基类保存为成员的实例.由于这些类都是使用传输到Web服务所需的XML序列化属性定义的,因此我选择使用序列化程序为我进行转换.

    TOutput ConvertEquivalentTypes<TInput, TOutput>(TInput structure)
        where TInput : class
        where TOutput : class
    {
        TOutput result = null;

        using (Stream data = new MemoryStream())
        {
            new XmlSerializer(typeof(TInput)).Serialize(data, structure);
            data.Seek(0, SeekOrigin.Begin);
            result = (TOutput)new XmlSerializer(typeof(TOutput)).Deserialize(data);
        }

        return result;
    }
Run Code Online (Sandbox Code Playgroud)