我有一个基于ASP.NET的web应用程序,允许最终用户将数据导出为平面文件格式。(实质上是对他们的工作进行实时备份)
在稍后的日期,他们可以重新上传(导入)该数据回到web应用程序。
备份的实际格式非常琐碎。使用WCF DataContractSerializer将对象图序列化为xml,然后压缩生成的xml文档。导入、解压缩并反序列化数据。
这个方法有一个小问题。版本控制..。随着时间的推移和数据结构的变化(属性/子集合被添加/移除或重命名),以前导出的用户版本的数据将不再映射到应用程序中的对象图。
是否有任何解决这个问题的具体模式或做法?或者其他你能推荐的阅读材料。
发布于 2012-04-18 13:28:59
多年来,我们一直在使用.NET Xml序列化相当大的.NET对象图。我们选择了一种非常简单的方法:在代码级别保持对象向后兼容。我们通常只添加新属性,在修改属性的数据类型的一种情况下,我们用修改过的数据类型创建了一个新属性,并在用户升级时从旧数据中初始化它。
我认为我们建立的一个最佳实践是,任何新属性总是作为一个完整的属性添加,而不仅仅是一个类成员变量。这使我们能够确保代码始终将新属性初始化为有用的默认值(而不是在反序列化期间初始化的空白/空值)。
这已经涵盖了5年来对应用程序的升级,没有将对象的旧版本反序列化为应用程序的更新版本所导致的错误。(一旦我们采用了上述方法)。
发布于 2012-04-22 15:26:07
您是否考虑过向导出中添加版本,然后在导入期间进行版本比较?
如果版本不匹配,您可以失败导入,或者警告用户导入可能失败,我看不到任何其他合理的解决方法。
https://softwareengineering.stackexchange.com/questions/144833
复制相似问题