【问题标题】:Serializing private members in C# recommended or not? [closed]是否推荐在 C# 中序列化私有成员? [关闭]
【发布时间】:2015-02-08 17:51:39
【问题描述】:

通过 Binary 和 Datacontract 序列化器,我们也可以序列化私有成员。 是否违反 oops 原则?我的意思是通过序列化我们可以将对象保存在文件、磁盘中,然后在反序列化后任何人都可以重用它。我不知道,我的想法是正确的。请纠正我。

【问题讨论】:

  • 可见性与隐私并不完全相同。任何对象都可以有任意数量的私有字段,这是为了保护对象的状态。这并不意味着它是敏感信息。
  • 既然你问了一个哲学问题,我就用一个稍微不同的观点来补充一下我的观点。我不使用具有业务逻辑的私有成员序列化对象。因为如果序列化或反序列化可以改变内部结构并绕过我的业务逻辑,那么我不能保证对象处于有效状态。因此,我将序列化视为我的应用程序的边界,并且我只通过我的边界传递 POCO 对象。

标签: c# serialization access-modifiers


【解决方案1】:

序列化的目的是把一些东西放在一个可以用完全相同的状态重新创建的格式中。为了能够重新创建具有完全相同状态的对象,您还需要能够在反序列化过程中重新创建“内部状态”(即私有成员持有的值)。

所以不建议在 C# 中序列化私有成员,这是必需的

【讨论】:

  • 以完全相同的状态重新创建的格式当然是序列化的目标,但不是真的单词本身的含义
  • @AntP 很公平,但对于已经在序列化概念上苦苦挣扎的人,我不确定是否有更好的方式来表达它。
  • “序列化意味着……”如果这很重要的话。
  • 我会选择“序列化的目的是......”,因为序列化实际上只是意味着放入一个连续的格式,其目的可能会有很大差异。
  • 怎么样:“序列化是将对象的状态写入字节流的过程。” - 赫伯特·席尔特。 :)
猜你喜欢
  • 2011-02-26
  • 2013-07-30
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多