您可以使用SerializableAttribute将类标记为可序列化。但是,您仍然可以序列化对象而不将其标记为可序列化。这样做有什么影响?
答案 0 :(得分:2)
我假设当你说“你仍然可以序列化一个对象而不标记它可序列化”时,你的意思是你自己在进行序列化/反序列化。
添加 [Serializable] 属性指示第三方代码可以序列化对象。当您想要在ASP.NET会话或其他工具(如Memcached缓存)中存储对象时,这尤其有用。
答案 1 :(得分:1)
将[Serializable]
放在Type上允许您将它与[System.Runtime.Serialization][1]
API一起使用,这对于最常见的场景非常方便,并且可以避免编写大量重复代码来序列化/反序列化对象,通常很容易测试和容易出错。并且它们在底层存储机制方面也获得了一些灵活性(例如二进制,XML,SOAP ......)。
如果您将[Serializable]
放在其中一个类型上,则应确保使用标准机制正确序列化/反序列化,或者您需要实现ISerializble
来自行控制该过程。你应该避免序列化的事情是事件处理程序属性。
最值得注意的是,在决定是否使用Serializable时,您可以获得完整对象图的自由序列化(根对象及其所有关联及其关联),否则这将非常复杂,尤其是涉及继承时。但为了实现这一目标,它要求您将所有类型都标记为Serializable
。
答案 2 :(得分:0)
据我了解,您可以使用代理来序列化非序列化对象,但是什么会提示您这样做?我不认为使用这种方法将私人成员序列化。您可能需要默认构造函数等。