Serialization is the process of converting an object into a stream of bytes. Deserialization is the opposite process of creating an object from a stream of bytes.
Serialization/Deserialization is mostly used to transport objects (e.g. during remoting), or to persist objects (e.g. to a file or database).
The .NET Framework supports two general types of serialization: shallow and deep.
Shallow serialization is the process of converting the read-write property values of an object into a byte stream, and is the technique used by the XmlSerializer and Web Services. This is called shallow serialization, because it doesn't serialize the object's underlying data but only the data available through public read-write property methods.
Deep serialization is the process of converting the actual values stored in an object's variables into a byte stream. It is the technique used by the BinaryFormatter and SoapFormatter objects, and by .NET Remoting.