之间的区别是什么使用 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属性,则(解)序列可以仅通过属性控制,并且是较不灵活。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top