从两个服务引用序列化相同的类

时间:2012-10-30 17:26:27

标签: c# class xml-serialization xmlserializer

我正在尝试使用XMLSerialize从我的一个类中生成一个包含来自两个第三方服务引用的成员的.xml。

我在XmlSerializer上遇到此错误(因为两个第三方服务在其引用中都有相同的类名)。

  

类型'ExternalServiceReference1.SameClass'和   'ExternalServiceReference2.SameClass'都使用XML类型名称,   'SameClass',来自命名空间'http:// blablabla /'。使用XML属性   为类型指定唯一的XML名称和/或命名空间。

ExternalServiceReference1中的TestClass1包含SameClass类型的成员 ExternalServiceReference2中的TestClass2也包含SameClass类型的成员

我的班级看起来像这样:

using ExternalServiceReference1; // This is the first thrid-party service reference, that contain the TestClass1. 
using ExternalServiceReference2; // This is the second thrid-party service reference, that contain the TestClass2.

[Serializable]
public class Foo
{
    public TestClass1 testClass1;
    public TestClass2 TestClass2;
}

My test program : 

class Program
    {
        static void Main(string[] args)
        {
            var xmlSerializer = new XmlSerializer(Foo.GetType());

        }
    }

我的问题:

如何在不修改项目中两个服务引用的reference.cs的情况下解决这个问题?

如果解决方案是在我自己的类(Foo)或XmlSerializer调用上添加属性,我没有问题。 但我不想更改为两个外部引用生成的reference.cs。

1 个答案:

答案 0 :(得分:0)

如果我理解了你的窘境,这应该会有所帮助。

namespace XmlSerializerTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Example exampleClass = new Example();
            exampleClass.someClass1 = new ext1.SomeClass(){ Value = "Hello" };
            exampleClass.someClass2 = new ext2.SomeClass(){ Value = "World" };

            var xmlSerializer = new XmlSerializer(typeof(Example));
            xmlSerializer.Serialize(Console.Out, exampleClass);
            Console.ReadLine();
        }
    }

    [XmlRoot(ElementName = "RootNode", Namespace = "http://fooooo")]
    public class Example
    {
        [XmlElement(ElementName = "Value1", Type = typeof(ext1.SomeClass), Namespace = "ext1")]
        public ext1.SomeClass someClass1 { get; set; }
        [XmlElement(ElementName = "Value2", Type = typeof(ext2.SomeClass), Namespace = "ext2")]
        public ext2.SomeClass someClass2 { get; set; }
    }
}

输出:

<?xml version="1.0" encoding="ibm850"?>
<RootNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http:
//www.w3.org/2001/XMLSchema" xmlns="http://fooooo">
  <Value1 xmlns="ext1">
    <Value>Hello</Value>
  </Value1>
  <Value2 xmlns="ext2">
    <Value>World</Value>
  </Value2>
</RootNode>