如何序列化/反序列化自定义DataSet

Tea*_*ild 3 c# serialization strongly-typed-dataset deserialization

我有一个winforms应用程序,它使用强类型自定义DataSet来保存数据以进行处理.它将填充数据库中的数据.

我有一个用户控件,可以获取任何自定义数据集并在数据网格中显示内容.这用于测试和调试.为了使控件可重用,我将自定义数据集视为普通的System.Data.DataSet.

我已扩展控件以允许将数据集保存到XML文件,并加载以前保存的XML文件.

我现在要做的是获取加载的数据文件,该文件被视为标准DataSet,并将其强制转换回自定义数据集.这应该不难,但我得到以下System.InvalidCastException消息:

无法将类型为"System.Data.DataSet"的对象强制转换为"CostingDataSet".

以下是问题代码的示例(它是生成异常的3的最后一行):

DataSet selected = debugDisplay.SelectedDataSet;

CostingDataSet tempDS = new CostingDataSet();
tempDS = (CostingDataSet)selected.Copy();
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我如何解决这个问题?

编辑: 根据nEM的评论我实现了这一切,一切都很好.

foreach (System.Data.DataTable basicDT in selected.Tables)
{
    DataTable dt = tempDS.Tables[basicDT.TableName];
    dt = basicDT.Copy();
}
Run Code Online (Sandbox Code Playgroud)

此外,SSarma建议的代码也有效.

nbz*_*nbz 5

根据我从本网站收集的内容,您无法将常规数据集转换为有类型的数据集,因为它的类型很强且具有一定的规格.如果您将其保存为常规数据集,则在对其进行反序列化时,XML不会记录它作为类型化数据集创建的情况.对于xml文件,您只保存了常规数据集,因此它等同于尝试通过显式转换将标准数据集转换为类型化数据集,这是不允许的.

您可以创建一个populate方法,该方法将常规数据集作为参数,将所有数据复制到您键入的数据集中.

这假设您将其序列化为标准数据集.