2013-05-09 93 views
1

使用.NET 4中的XmlSerializer,我試圖序列化一個包含兩個具有相同名稱但名稱空間不同的類的類。XmlSerializer - 反映類型時發生錯誤。兩個具有相同名稱的類

[XmlInclude(typeof(MyNamespace1.MyClass))] 
[XmlInclude(typeof(MyNamespace2.MyClass))] 
public class SuperInfo 
{ 
    public MyNamespace1.MyClass A{ get; set; } 
    public MyNamespace2.MyClass B{ get; set; } 
} 

事實證明,序列化程序無法區分這兩個類具有相同的名稱。例外顯示:

'類型MyNamespace1.MyClass'和'MyNamespace2.MyClass'都使用名稱空間''中的XML類型名稱'MyClass'。使用XML屬性爲類型指定唯一的XML名稱和/或名稱空間。

我找到了解決辦法in this thread,包括裝修中的同名類,像這樣的屬性:

[XmlType("BaseNamespace1.MyClass")] 
[XmlType("BaseNamespace2.MyClass")] 

,但我不能這樣做,因爲在我的情況下,這些類來自一個自動生成代理到Web服務。

您有解決方案嗎?

回答

0

在我失去了足夠的時間之後,我可以用這種說法結束,它幾乎是不可能的(沒有什麼是不可能的)。我也嘗試過使用ISerializable接口實現。

1

你可以嘗試Newtonsoft.Json到對象轉換爲XML像下面

using System.Xml.Serialization; 
using Newtonsoft.Json; 

namespace SoTestConsole 
{ 
    [XmlInclude(typeof(TestClassLibrary.Class1))] 
    [XmlInclude(typeof(TestClassLibrary1.Class1))] 
    public class SuperInfo 
    { 
     public TestClassLibrary.Class1 A { get; set; } 
     public TestClassLibrary1.Class1 B { get; set; } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var obj = new SuperInfo() 
      { 
       A = new TestClassLibrary.Class1() { MyProperty = "test1" }, 
       B = new TestClassLibrary1.Class1() { MyProperty = "test2" } 
      }; 

      // Error case 
      //XmlSerializer xmlSerializer = new XmlSerializer(typeof(SuperInfo)); 

      // but below will work 
      var json = JsonConvert.SerializeObject(obj); 
      var xDoc = JsonConvert.DeserializeXNode(json, "SuperInfo"); 

     } 
    } 
} 

輸出

<SuperInfo> 
    <A> 
    <MyProperty>test1</MyProperty> 
    </A> 
    <B> 
    <MyProperty>test2</MyProperty> 
    </B> 
</SuperInfo> 
+0

你的解決方案的工作原理,但我想使用System.Xml.Serialization dll – javi 2013-05-13 11:34:28

1

我認爲你可以爲每個代理類的創建部分類,並添加進XML頭中每一個。

+0

如果我在這些代理類中有枚舉類型會怎樣? – javi 2013-05-13 07:07:08

+0

在我失去了足夠的時間之後,我可以用這個說法結束,它幾乎是不可能的(沒有什麼是不可能的)。 我也嘗試過使用ISerializable接口實現。 – javi 2013-05-13 11:30:35

相關問題