当其中一种类型更改时,如何转换Typed DataSet Scheme?

时间:2020-03-05 18:58:10  来源:igfitidea点击:

我得到了一个类型化(未连接)的数据集,并使用该数据集创建了许多记录(二进制序列化)。
我已将属性添加到其中一种类型中,并且我想用新数据集转换旧记录。
我知道如何加载它们:为具有旧架构dll的BinaryFormatter提供自定义绑定程序。
问题是如何将旧类型的对象转换为新类型的对象,这两种类型都具有相同的名称,但是新类型又具有一个属性。

解决方案

回答

我们能使新类继承自旧类吗?如果是这样,也许我们可​​以通过铸造简单地反序列化为新的序列。

如果不是,另一种可能的解决方案是实现批处理操作,其中我们在不同的命名空间中包括对旧类和新类的引用,合并旧对象,对新类的对象执行深层复制,然后序列化新对象。

回答

如果现有数据集和新数据集之间的唯一区别是添加的字段,则可以通过将旧数据集写为XML,然后将其读取为新数据集来"升级"它们。添加字段的值将为DBNull。

MyDataSet myDS = new MyDataSet();
MyDataSet.MyTableRow row1 = myDS.MyTable.NewMyTableRow();
row1.Name = "Brownie";
myDS.MyTable.Rows.Add(row1);

MyNewDataSet myNewDS = new MyNewDataSet();

using(MemoryStream ms = new MemoryStream()){
    myDS.WriteXml(ms);
    ms.Position = 0;
    myNewDS.ReadXml(ms);
}