2011-02-15 36 views
3

我試圖序列化一個在元素文本中使用的布爾對象,並且我面對一個非常奇怪的行爲。 我得到一個錯誤與下面的代碼:當繼承一個類時使用XMLTextAttribute

[XmlRoot] 
public class A 
{ 
} 

public class B : A 
{ 
    [XmlText] 
    public bool value = false; 
} 

和序列化

using (StreamWriter sw = new StreamWriter("test.xml")) 
{ 
    B b = new B(); 
    XmlSerializer serializer = new XmlSerializer(typeof(B)); 
    serializer.Serialize(sw, b); 
} 

例外的細節:

「有反射式「ConsoleApplication2.B錯誤「

和內部異常說:

「無法序列化'ConsoleApplication2.B'類型的對象。考慮從System.Boolean改變XMLTEXT構件「ConsoleApplication2.B.value」的類型爲字符串或字符串數​​組「

更改類定義是這樣的:

public class B 
{ 
    [XmlText] 
    public bool value = false; 
} 

或這樣的:

[XmlRoot] 
public class A 
{ 
} 

public class B : A 
{ 
    public bool value = false; 
} 

,甚至是這樣的:

[XmlRoot] 
public class A 
{ 
} 

public class B : A 
{ 
    [XmlText] 
    public string value = "false"; 
} 

它序列化正確,但在第一種情況下,我失去了繼承,在第二種情況下,值是在另一個元素,而不是在文本中,在最後一個我失去了字符串的類型。

有誰知道我錯過了什麼?

回答

2

據微軟稱,這不是一個錯誤,它是這樣的'by design',但我找不到有關該限制的文檔。無論如何,我只會嘗試任何可能的解決方法。