【发布时间】:2011-11-07 21:06:41
【问题描述】:
背景
这是我的问题。在我的程序过程的早期,System.Data.DataSet 被序列化到一个文件中。然后过了一段时间,程序中的数据集架构发生了变化,特别是在其中一个表中添加了一个列。
此数据集是使用 VS 和 C# 创建的,因此它具有能够按名称访问行和列的所有属性(通过 Microsoft 生成的代码)。它包含 VS 需要知道数据集长什么样以及其中的名称的所有文件(.xsd、.cs 等)。
文件通过 XML 序列化加载和保存。现在这会导致一个问题,因为当我反序列化旧文件时,它会加载与旧模式相关的数据。这在大多数情况下都有效,但是创建的对象(数据集)除了稍后添加的列之外,还有其他所有内容。因此,当尝试访问新列时,它会失败,因为反序列化不知道它并且整个列最终为空。
现在这会导致更多问题,因为它在尝试通过数据集的属性访问该列(因为它为空)时引发异常。
问题
我的问题是,我可以在反序列化后以某种方式在列中添加吗?我显然需要添加它以使其符合 Microsoft 生成的代码,因为这样做:
myDataSet.myTable.Columns.Add("MyMissingColumn");
...不添加它需要的列。它可能会添加一列,但行属性myDataRow.MyMissingColumn 返回 null 并输出错误。
我是否需要以某种方式将新架构复制到此对象中?同样,失败的唯一原因是旧文件是使用旧模式序列化的。
欢迎提出任何建议。
【问题讨论】:
标签: c# dataset schema nullreferenceexception