当其中一种类型更改时,如何转换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); }