在C#中序列化和存储对象的最简单方法是什么?

5
我正在寻找一种简单的解决方案,用于序列化和存储包含配置、应用程序状态和数据的对象。这是一个简单的应用程序,没有太多的数据。速度不是问题。我希望它在进程内运行。我希望它比xml更容易在文本编辑器中编辑。
我找不到任何适用于.net的文档数据库可以处理进程内的数据。简单地将数据序列化为XML,我不确定是否想要这样做,因为它是... XML。将数据序列化为JSON似乎非常JavaScript特定,并且我不会在JavaScript中使用这些数据。
我认为有很多很好的方法来解决这个问题,但目前我倾向于使用JSON,尽管它与JavaScript有关。

我找不到任何适用于 .NET 的文档数据库,可以在进程中处理它。你所说的“in-process”让我感到困惑,请问是什么意思? - Tigran
看看 MongoDB,它需要一个单独的进程来处理数据请求。我宁愿跳过运行另一个进程,并能够将所有内容放在同一个进程中。 - MatteS
好的,那么也许在我的回答中第二个选项可以成为你的选择之一。 - Tigran
2个回答

5

仅仅因为“JSON”是JavaScript对象表示法的缩写,这并不意味着它是否适合您作为数据格式。JSON是轻量级的,基于文本的,易于人类阅读/编辑,并且尽管名称如此,但它是一种与语言无关的格式。

我肯定会倾向于使用它,因为它听起来非常适合您的情况。


1
我会给你几个选项:
  1. 二进制序列化:它取决于你的对象内容,如果你有复杂的依赖树,序列化可能会出现问题。而且它不是非常灵活,因为由Microsoft提供的标准二进制序列化也会保存类型信息。这意味着如果你在二进制文件中保存一个类型,并且在一个月后决定重新组织你的代码,比如将相同的类移动到另一个命名空间中,在以前保存的二进制文件进行反序列化时会失败,因为类型已经不同了。虽然有一些解决方法,但我个人尽量避免使用这种序列化。

  2. ORM映射并将其存储到小数据库中。SQLite是这种情况下的绝佳选择,因为它是一个小型(单文件)和完整支持ACID的数据库。你需要一个映射器,或者你需要自己实现映射器。

我相信你很快就会从大家那里得到其他选择。

所以选择权在你手中。

祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接