如何将缺少的字段反序列化为空

时间:2010-04-26 22:42:43

标签: .net

我正在开发一个.NET项目,在项目的整个生命周期中创建了相同类型对象的多个版本 - 大多数新版本添加了一两个字段。但是,现在我希望为旧版本的用户缓解问题。

我的目标是当用户尝试使用新程序打开旧版本的序列化对象时,程序会自动将默认值分配给文件的折旧版本中缺少的字段。

例如,假设我有一个带有两个布尔字段的类 - RepeatSound和RepeatForever。该程序的第一个版本不知道如何永远重复,所以它只保存了RepeatSound:

<anyType xsi:type="Sound">
    <RepeatSound>true</RepeatSound>
</anyType>

但新文件如下所示:

<anyType xsi:type="Sound">
    <RepeatSound>true</RepeatSound>
    <RepeatForever>true</RepeatForever>
</anyType>

我的目标是当我反序列化新程序中的第一个文件时,它将创建Sound对象,但只是将RepeatForever的值默认为false。现在尝试反序列化第一个对象会引发异常。

提前感谢您的回复

编辑:我正在使用“XmlSerializer”类

2 个答案:

答案 0 :(得分:0)

参见this page特别是关于minOccurs = 0和默认值属性

的部分

答案 1 :(得分:0)

我相信您将不得不实施[IXmlSerializable][1]接口来自行进行反序列化。