猿问
下载APP

什么是以及何时使用它?

我发现有些类使用该[Serializable]属性。

  • 它是什么?

  • 我应该什么时候使用它?

  • 我会得到什么样的好处?


郎朗坤
浏览 71回答 3
3回答

慕姐8265434

它是什么?在.Net框架应用程序中创建对象时,无需考虑如何将数据存储在内存中。因为.Net Framework会为您解决这个问题。但是,如果要将对象的内容存储到文件,将对象发送到另一个进程或通过网络传输,则必须考虑如何表示对象,因为您需要转换为其他格式。此转换称为SERIALIZATION。用于序列化序列化允许开发人员保存对象的状态并根据需要重新创建它,提供对象的存储以及数据交换。通过序列化,开发人员可以执行诸如通过Web服务将对象发送到远程应用程序,将对象从一个域传递到另一个域,将对象作为XML字符串传递到防火墙,或者维护安全性或特定于用户的操作跨应用程序的信息应用于SerializableAttribute类型以指示可以序列化此类型的实例。应用SerializableAttribute即使类还实现了ISerializable控制序列化过程的界面。SerializableAttribute默认情况下,标记为类型的所有公共和私有字段都是序列化的,除非该类型实现了ISerializable覆盖序列化过程的接口。默认序列化过程会排除标记为的字段NonSerializedAttribute。如果可序列化类型的字段包含特定于特定环境的指针,句柄或某些其他数据结构,并且无法在不同环境中进行有意义的重构,则您可能希望应用于NonSerializedAttribute该字段。有关详细信息,请参阅MSDN。编辑1任何不将某些东西标记为可序列化的理由传输或保存数据时,只需发送或保存所需数据。因此,传输延迟和存储问题将会减少。因此,您可以在序列化时选择不必要的数据块。

HUH函数

[Serializable]属性的一些实际用途:使用二进制序列化保存对象状态; 您可以非常轻松地将应用程序中的整个对象实例“保存”到文件或网络流中,然后通过反序列化重新创建它们 - 查看BinaryFormatterSystem.Runtime.Serialization.Formatters.Binary中的类。使用Clipboard.SetData()--nseserialisable类编写其对象实例可以存储在剪贴板上的类不能放在剪贴板上。编写与.NET Remoting兼容的类; 通常,您在应用程序域之间传递的任何类实例(从那些扩展自的域实例除外MarshalByRefObject)必须是可序列化的。这些是我遇到的最常见的用例。

catspeake

由于最初的问题是关于SerializableAttribute,因此应该注意,此属性仅在使用BinaryFormatter或SoapFormatter时适用。这有点令人困惑,除非你真正关注细节,何时使用它以及它的实际目的是什么。它与XML或JSON序列化无关。与SerializableAttribute一起使用的是ISerializable Interface和SerializationInfo类。这些也只与BinaryFormatter或SoapFormatter一起使用。除非您打算使用Binary或Soap序列化您的类,否则不要将您的类标记为[Serializable]。XML和JSON序列化程序甚至都不知道它的存在。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答