When you create an object in a .Net framework application, you don't need to think about how the data is stored in memory. Because the .Net Framework takes care of that for you. However, if you want to store the contents of an object to a file, send an object to another process or transmit it across the network, you do have to think about how the object is represented because you will need to convert to a different format. This conversion is called SERIALIZATION.
Serialization allows the developer to save the state of an object and recreate it as needed, providing storage of objects as well as data exchange. Through serialization, a developer can perform actions like sending the object to a remote application by means of a Web Service, passing an object from one domain to another, passing an object through a firewall as an XML string, or maintaining security or user-specific information across applications.
SerializableAttribute to a type to indicate that instances of this type can be serialized. Apply the
SerializableAttribute even if the class also implements the
ISerializable interface to control the serialization process.
All the public and private fields in a type that are marked by the
SerializableAttribute are serialized by default, unless the type implements the
ISerializable interface to override the serialization process. The default serialization process excludes fields that are marked with
NonSerializedAttribute. If a field of a serializable type contains a pointer, a handle, or some other data structure that is specific to a particular environment, and cannot be meaningfully reconstituted in a different environment, then you might want to apply
NonSerializedAttribute to that field.
See MSDN for more details.
Any reason to not mark something as serializable
When transferring or saving data, you need to send or save only the required data. So there will be less transfer delays and storage issues. So you can opt out unnecessary chunk of data when serializing.
~ Answered on 2011-05-04 02:33:48