2012-07-30 57 views
1

我試圖從我的XML文件反序列化一個Nullable<bool>。我的期望是,在我的XMLElement中找不到的XMLAttribute是null,如果發現它將是truefalse。序列化相同。如果它不爲空,我的變量將被寫入。如何反序列化可空<bool>?

無論如何,每當我試圖反序列化我的XML將被拋出一個InvalidOperationException

我的類看起來像這樣

[XMLArray("Users")] 
public class User 
{ 
    [XMLAttribute("copy")] 
    public bool? copy; 
} 

任何想法?

+1

看看這種方法,這個最好的答案是:http://stackoverflow.com/questions/1295697/deserializing-empty-xml-attribute-value-into-nullable-int-property-using-xmlseri它基本上在可空對象周圍包裝一個屬性並對其進行序列化/反序列化。從序列化中忽略布爾屬性。 – lahsrah 2012-07-30 07:15:00

+3

你可以使用 'public bool ShouldSerializecopy(){return copy.HasValue;}'如下所示:http://stackoverflow.com/questions/244953/serialize-a-nullable-int – 2012-07-30 07:16:20

+0

非常感謝sylon! – theknut 2012-07-30 07:28:15

回答

3
[XMLArray("Users")] 
public class User 
{ 
    [XmlIgnore] 
    public bool? m_copy; 

    [XmlAttribute("copy")] 
    public string copy 
    { 
     get { return (m_copy.HasValue) ? m_copy.ToString() : null; } 
     set { m_copy = !string.IsNullOrEmpty(value) ? bool.Parse(value) : default(bool?); } 
    } 
} 

我從answer得到了解決方案,以sylon鏈接的職位。非常感謝!