之间有什么区别使用的序列化属性和实施法?
-
23-09-2019 - |
题
之间的区别是什么使用 Serializable
属性和执行 ISerializable
接口?
解决方案
当你使用 SerializableAttribute
属性你把一个属性,在一个领域在编制时间,在这样一种方式,当在运行时,列化的设施将知道是什么序列化的基础上属性进行思考类/模块/组件的类型。
[Serializable]
public class MyFoo { … }
上述指示的序列化设施应该列化的整个班级 MyFoo
, 而:
public class MyFoo
{
private int bar;
[Serializable]
public int WhatBar
{
get { return this.bar; }
}
}
使用的属性,可以有选择性地选择哪些领域需要序列化。
当你执行 ISerializable
接口, ,编序有效地得到的复盖的定制版本,通过压倒一切的 GetObjectData
和 (并且通过提供一种构造形式 SetObjectData
MyFoo(SerializationInfo info, StreamingContext context)
),将有一个更精细程度的控制序列化的数据。
也参看 这个例子中的一个自定义的化在这里计算器.它显示了如何来保持化向后兼容不同的versionings的化数据。
希望这会有所帮助。
其他提示
在 SerializableAttribute 指示框架做默认序列化处理。如果您需要更多的控制,可以实现了ISerializable介面。然后,你会把自己的代码序列化的GetObjectData
方法的对象,并更新了在传递给它的SerializationInfo
对象。
在ISerializable
的界面让你实现的自定义序列的default之外。
当实现的ISerializable
接口,你必须重写GetObjectData
方法如下
public void GetObjectData (SerializationInfo serInfo,
StreamingContext streamContext)
{
// Implement custom Serialization
}
ISerialize迫使你实现序列化逻辑manially,而由Serializable属性标记(你的意思是?)会告诉二进制序列,这一类可以被序列化。它会自动做到这一点。
继承从ISerializable的允许将自定义实现的(de)序列化。当仅使用Serializable属性,则(解)序列可以仅通过属性控制,并且是较不灵活。