C#中的XML反序列化#

问题描述:

我有一个之前被序列化过的类。我们有它的xml输出。 当我们打开项目时,我们反序列化xml以获取保存的对象。 现在我已将新的bool属性添加到类中,并且由于它是一个新属性,所以旧xml不具有此属性。我的反序列化工作正常,但为bool属性赋予false,如果它不在XML中,我希望它设置为true。我怎样才能做到这一点?我试过像这样C#中的XML反序列化#

public bool? _flag; 
[XmlElement("Flag")] 
public bool? flag 
{ 
    get 
    { 
     if (null != _flag) 
     { 
      return _flag; 
     } 
     return true; 
    } 
    set { _flag= value; } 
} 
+1

反序列化跳过初始化,您可以检查http://*.com/questions/1266547/how-do-you-find-out-when-youve-been-loaded-via-xml-serialization的解决方法 – Polity 2013-03-13 03:59:33

你只需要添加你的默认构造函数并将其设置在那里。这里有一个例子:

public MyObject() 
{ 
    Flag = true; 
} 

编辑

我不知道发生了什么事情在你的代码,但是这个工作完全正常:

public class MyObject 
    { 
     public MyObject() 
     { 
      Flag = true; 
     } 

     public bool Flag { get; set; } 

     public string Name { get; set; } 
    } 

首先,我没有在那里有bool属性并将其序列化为一个文件..然后对于第2步,我添加了bool属性和构造函数..然后从磁盘反序列化它,并且它显示了true,这正是我的预期。

请检查您的代码,因为我预计会发生其他事情。如果您需要帮助,请在这里发布完整课程。

+0

谢谢对于你的回复......但在添加构造函数后,它仍然将标志值设置为false :( – 2013-03-13 05:16:02

+0

这很奇怪..因为我刚刚在这里试过了,它工作得很好,你能发布你的整个班级吗? – Matt 2013-03-13 05:43:21

+0

看到我上面的编辑。 – Matt 2013-03-13 05:47:15