为什么必须使用[serializable]属性标记一个类?

Bla*_*man 15 c# serialization attributes serializable

看到您可以将任何文档转换为字节数组并将其保存到磁盘,然后将文件重建为其原始格式(只要您的文件名包含元数据等).

你为什么要用等级来标记一个班级[Serializable]?这是一个相同的想法,"元数据"类型信息,所以当你将对象转换为它的类时,事物是否正确映射?

Han*_*ant 25

二进制序列化非常强大,它可以在不运行构造函数的情况下创建类的实例,并且可以在类中设置您声明为private的字段.常规代码当然不能这样做.通过应用[Serializable]属性,您可以明确地让它变得混乱您的私有部分.并且您隐式将该权限仅授予BinaryFormatter类.

XML序列化不需要这种方式,它只序列化公共成员.

DataContractSerializer也可以序列化私有成员.因此,现在需要一个明确的好处,现在使用[DataContract]属性.

  • 那句话中的"公开"一词似乎使你神秘. (3认同)

Ode*_*ded 17

首先,你不要来.

它只是一个标记接口,告诉序列化程序该类由可以序列化的项(可能是也可能不是)组成,并且可以使用默认序列化.

XMLSerializer有额外的要求,具有零参数的构造函数的类.

还有其他序列化程序使用契约进行序列化(例如DataContractSerializer) - 它们使您可以更好地控制序列化,而不仅仅是将类标记为Serializable.您还可以通过实现ISerializable界面获得更多控制权.

  • XmlSerializer不需要SerializableAttribute (7认同)