我有一个打字(未连接)的数据集,以及使用此数据集创建的许多记录(二进制seriliazed)。 我已经为其中一种类型添加了一个属性,并且我希望使用新数据集转换旧记录。 我知道如何加载它们:使用旧架构dll为BinaryFormatter提供自定义绑定器。 问题是我如何将旧类型的对象转换为新类型的对象 - 两种类型具有相同的名称,但新类型具有一个属性。
答案 0 :(得分:2)
如果现有数据集与新数据集之间的唯一区别是添加的字段,那么您可以通过将旧的数据库写入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);
}
答案 1 :(得分:0)
你可以让新类继承旧类吗?如果是这样,也许您可以通过强制转换简单地反序列化为新的。
如果没有,另一种可能的解决方案是实现批处理操作,其中包括对旧类的引用和不同命名空间中的新类,水合旧对象,对新类的对象执行深层复制,以及序列化新对象。