2011-05-09 31 views
3

我确实有一些类来实现它们自己的序列化/反序列化,但是我没有实现system.runtime.serialization.ISerializable就做了所有这些。所以我的问题是什么是使用system.runtime.serialization.ISerializable的好处?什么架构使用system.runtime.serialization.ISerializable?

将我们需要实现system.runtime.serialization.ISerializable例如什么情况

回答

3

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

而且这是非常奇怪的是,你决定写自己的序列。编写高效的生产质量序列化相当昂贵,特别是当二进制和XML序列化准备好在.net中使用时,以及Protobuf和Thrift等一些酷酷的第三方应用程序。

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

一个现实生活中的例子,当你想挂接到二进制序列化是它序列化DateTime当失去时区。 (至少在.NET 2.0)

+0

同意;序列化最好由* library *代码处理,白痴们花费了大量的时间来考虑常见和边缘情况。 – 2011-05-09 12:13:06

+0

@Marc Gravell♦是,序列化功能,我绝不会实现,因为我甚至无法想象它会需要多少时间消耗仍然将是糟糕的:) – Andrey 2011-05-09 12:16:09

+1

我觉得我目前的估计是“地段” – 2011-05-09 12:19:24

2

ISerializable所使用的BinaryFormatter当你需要坚持就是有点复杂得多只是序列化的字段中的数据 - 例如,你想以不同的方式处理数据(可能凝结 - 例如,字典在内存中非常广泛,但可以是线上的键/值列表)。同样,“链接列表” - 您还想要在一个对象(列表)的序列化中迭代该,而不是仅序列化第一个节点,并让该节点将自身和下一个节点序列化等。