【问题标题】:Saving data into DB s considered Serialization?将数据保存到数据库中是否考虑了序列化?
【发布时间】:2015-08-20 06:31:59
【问题描述】:

序列化 -> 将对象转换为二进制表示,然后可以写入磁盘或写入文件..

以上是我所知道的序列化的基本定义。但这究竟意味着什么?我的应用程序中有一个类,我用它从用户那里获取数据并将其存储在数据库中。这是否意味着我在这里使用序列化?即使存储数据更像是保存对象的状态,我可以再次获取数据并形成相同的对象。

谁能告诉我什么是真正的连载?如果不使用序列化,结果会怎样?将数据保存在文件中和在文件中进行序列化(以保存数据)有什么区别。

【问题讨论】:

  • 我觉得这个问题很有趣。由于“他们”谈到序列化是一种二进制形式,我想知道他们对内存中的对象有何看法。内存数据库是否也使用序列化?我想说的是灰色地带。
  • 没错,但我们不对存储在数据库中的类数据使用序列化!每当我遇到序列化时,这总是很难理解。

标签: c# serialization


【解决方案1】:

我怀疑在数据库中存储数据是否应该被视为序列化。即使您存储来自面向对象的编程层的数据,实际上您也是在将对象转换为关系世界,反之亦然。 这称为数据映射

也许您可能会争辩执行INSERT 是以可互操作的格式存储数据。不一定,因为 SQL 是一种用于管理关系数据的领域特定语言,而且您不知道数据实际上是如何存储在内存或磁盘中的。 SQL 本身不是序列化格式。

由于大多数数据库都在磁盘上,因此您可以考虑将数据库寄存器持久化到磁盘上以便之后检索或更改它们的过程,并使用 RAM 来优化读取和写入,而无需将整个数据库传输到内存中。

另一方面,序列化可以以二进制或非二进制格式完成。例如,您可以将一个对象序列化为 JSON,而 JSON 不是二进制格式。此外,XML 多年来一直被用作序列化格式,它不是二进制的。

序列化的一个很好的定义可能是:当一些内存中的对象被转换为可互操作的表示,可以存储在磁盘中或通过线路传输以便轻松返回时,请考虑序列化它是任何平台和语言中能够理解序列化格式的内存对象。

例子:

  • 一个 REST API 将用户列表作为序列化为 JSON 的数据传输对象发送。
  • 应用程序允许用户直观地编辑其配置和设置。当 UI 需要显示当前值时,它会将配置反序列化回对象以将它们绑定到 UI,一旦用户按下 Save,配置就会再次序列化到磁盘。
  • 应用程序提供自己的备份。备份可以是序列化为 JSON 的整个对象图。

【讨论】:

  • 嗯.. 在这种情况下,我将对象数据保存在文件中(将其保存为表格格式而不是 json/xml)。我正在将该文件传输到其他计算机并使用相同的数据文件。我将编写一个逻辑,以便获取数据并对其进行处理并创建一个新对象。这也是序列化吗??
  • @MohanPrasath 为什么不呢?如果您将数据转换为文件以在其他环境中重新运行,那么您就是在序列化/反序列化数据,不是吗?
  • Fidemraizer:现在我明白你的意思了。序列化只是使用一种通用的标准格式来跨设备发送和检索数据。所以我不必编写逻辑来处理传入的数据。由于我们有预定义的标准逻辑,我们正在使用这些技术跨平台发送数据。谢谢..:)
  • @MohanPrasath 不仅可以跨设备使用,还可以跨设备使用相同的应用程序。有很多用例。不客气;)
  • Fidemraizer:是的,但是这里已经定义了标准。开发者不必每次都为如何发送和处理数据而烦恼。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 2015-08-09
  • 2011-10-05
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多