什么架构使用system.runtime.serialization.ISerializable?

时间:2011-05-09 12:05:06

标签: c# .net vb.net serialization interface

我确实有一些类实现了他们自己的序列化/反序列化,但我正在做所有这些而不实现system.runtime.serialization.ISerializable。所以我的问题是使用system.runtime.serialization.ISerializable会带来什么好处?

在什么示例情况下我们需要实现system.runtime.serialization.ISerializable?

2 个答案:

答案 0 :(得分:3)

序列化不与标准.net序列化机制集成。您不能将其与BinaryFormatter一起使用。 ISerializable使a)控制序列化成为可能b)将其集成到二进制序列化的标准机制中。

你决定编写自己的序列化也很奇怪。编写高效的生产质量序列化是相当昂贵的,特别是当有.net中的二进制和XML序列化以及一些很酷的第三方序列化时,比如Protobuf和Thrift。

在MSDN上的ISerializable page实际上给出了很好的例子。

当你想要挂钩二进制序列化时,一个真实的例子就是它在序列化DateTime时会丢失时区。 (至少在.net 2.0中)

答案 1 :(得分:2)

当您需要保留比 序列化字段更复杂的数据时,ISerializable使用

BinaryFormatter - 例如,您要处理数据不同的(可能是浓缩的 - 例如,字典在内存中非常广泛,但可以只是线上的键/值列表)。同样是一个“链表” - 您再次想要在一个对象(列表)的序列化中迭代,而不是仅序列化第一个节点,并让该节点序列化自己和下一个节点等等。