c# - 在 .net 中将数据保存到文件时的良好编码习惯

标签 c# .net file-io

提供一些背景知识。

我创建了一个应用程序,允许用户保存设置并在以后调用这些设置。为此,我创建了一些可序列化的对象。我已经使用 BinaryFormatter 毫不费力地完成了这项工作。

当我升级软件和添加新设置时,我开始遇到问题。现在我的可序列化对象不匹配,所以我必须更新文件。我已经成功地完成了几个版本。但为此,我尝试反序列化文件,如果它抛出异常,我尝试使用下一个版本。 . .然后是下一个。 . .然后是下一个。 . .直到我找到合适的那个。然后我必须为每个旧版本编写转换函数以将其转换为最新版本。我确实也创建了一个“修订”文件,所以我可以预先检查他们有什么版本然后升级它,但我仍然必须保留很多不同的“版本”并为所有这些版本编写转换函数. . .这对我来说似乎天生就是乱七八糟的,如果我继续走这条路,以后很容易膨胀。

必须有更好的方法来做到这一点,我只是不确定如何。

谢谢

最佳答案

你需要写一个serialization binder解决程序集。

对于设置,我使用 Dictionary<string, byte[]>保存到文件。我序列化了字典,一切都很好。当我添加新设置时,如果在设置文件中找不到,我会提供一个默认设置。

此外,如果您要向序列化对象添加字段,则可以使用 [Optional] 进行修饰。

关于c# - 在 .net 中将数据保存到文件时的良好编码习惯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14968296/

相关文章:

c# - 如何在 unity/C# 中检测时钟是否设置为 12 小时或 24 小时时间格式?

c# - Serilog 相当于 log4net.Config.Watch?

c# - 方法的执行时间在增加,为什么会这样?

c++ - "fastfwd"文件可以是管道/套接字/fifo

python - "seek"在新创建的二进制文件上使用时是否写入零字节?

c# - 尝试在 asp.net 中启用显示/隐藏功能

c# - 如何将 JToken 添加到 JObject?

c# - 如何使用 c#/cmd 将新行添加到 msi 文件的属性表

c# - FormView 绑定(bind)中的 DropDownList

c - freopen 或 freopen_s,它们到底在做什么?