2

使用 XmlSerializer 类反序列化 xml 流时遇到问题。

我有一个这样的对象:

public class Test
{
  [XmlElement("data")]
  public AnotherObject Data
  {
    get; set;
  }

  // other properties
}

当我尝试反序列化它时它会正常工作:

<Test>
  <data>...</data>
  <something else... />
</Test>

但是,如果 xml 是这样的:

<Test>
  <something else... />   
</Test>

当我尝试读取新创建对象的 Data 属性时,代码会抛出异常。如果我尝试观察对象,调试器会打印“无法评估异常”。

我希望该属性存在,即使 XML 中没有相应的标记。

有可能这样做吗?

谢谢 !

4

2 回答 2

3

XML 反序列化在设置属性之前使用调用默认构造函数。您可以将data属性设置为默认值,如果从反序列化加载该属性将被覆盖。

于 2012-07-24T15:34:22.110 回答
1

看看这是否有帮助:

public class Test
{
  [XmlElement("data")]
  public System.Nullable<AnotherObject> Data
  {
    get; set;
  }

  // other properties
}

这将允许为 AnotherObject 接受空值,本质上允许 Data 为空。

注意:这非常依赖于您的架构。如果您的架构阻止空值,这将不起作用。有关详细信息,请参阅:http: //msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

于 2012-07-24T15:43:04.380 回答