【问题标题】:Serialization Use Cases [closed]序列化用例 [关闭]
【发布时间】:2013-01-07 02:47:31
【问题描述】:

我不清楚什么时候应该使用序列化/反序列化技术

谁能提供一些基本的用例场景?

【问题讨论】:

    标签: c# serialization


    【解决方案1】:

    序列化是将对象转换为某种编码表示以将其从一个地方移动到另一个地方的过程。通常,这是将对象转换为字节数组或 XML 字符串之类的过程,但如果您愿意,也可以序列化为其他格式。

    序列化最常见的用途是当您需要跨进程、机器或更准确地说是 AppDomain 边界移动对象时。因此,如果要将对象从服务器 A 发送到服务器 B,则必须在服务器 A 上序列化该对象,然后将该对象的编码表示发送到服务器 B,并让服务器 B 反序列化该对象以便使用另一端。

    并非所有对象都易于序列化——例如,如果将指针发送到另一台服务器,则在内存中具有指向服务器上某个位置的指针的对象可能没有意义。在这种情况下,您必须编写自己的自定义逻辑来确定如何处理该指针。也许你根本不会序列化你的对象的那个属性......也许你也会序列化指针指向的对象——这将取决于你。这就是为什么序列化并不总是容易或自动的。

    【讨论】:

      【解决方案2】:

      序列化只是表示处于序列化状态的对象实例的艺术,允许它们随时重新创建为对象类型。两个简单的用例是将对象写入文件并将它们写入Stream(用于网络通信,或进程间通信,或其他)。

      例如,如果您想像这样传输一个简单的 DTO:

      public class TestDto
      {
          public string TestText { get; set; }
          public string MoreText { get; set; }
      }
      

      ..您可以添加[Serializable] 并使用BinaryFormatter 之类的内容,以便能够从NetworkStream 的另一端读取它。

      您不能简单地将对象实例默认写入任何形式的Stream 或文件,并让它在另一端保持不变。当然,有一些库可以帮助解决这个问题(例如 WCF),它们将在内部进行转换(对于[Serializable] 类)。

      (我不知道你为什么有,但序列化肯定不是 WPF 特有的)

      【讨论】:

      • 我添加了 wpf,因为我认为查看此标签的人也可以为我提供一些建议
      • @iltzortz 但除非您正在寻找与 WPF 相关的答案,否则您不应该真正使用该标签。
      • 好的,我认为你是对的,我删除了它
      【解决方案3】:

      几个明显的例子是当您需要跨进程边界传输类的实例时(例如,当使用 WCF 或其他一些远程通信技术时)或者您希望将实例持久保存到流(可能是文件)中。

      【讨论】:

        猜你喜欢
        • 2011-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-26
        相关资源
        最近更新 更多