Serialization (C#)

Serialization is the procedure of converting an object into a stream of bytes to store the object or transmit it to memory, a database, or a file. Its primary purpose is to save the state of an object in guild to be able to recreate it when needed. The reverse process is chosen deserialization.

How serialization works

This illustration shows the overall process of serialization:

Serialization graphic

The object is serialized to a stream that carries the data. The stream may likewise have information about the object'southward type, such as its version, culture, and associates name. From that stream, the object can be stored in a database, a file, or memory.

Uses for serialization

Serialization allows the developer to save the country of an object and copy information technology as needed, providing storage of objects as well every bit information exchange. Through serialization, a developer tin can perform actions such as:

  • Sending the object to a remote awarding by using a web service
  • Passing an object from i domain to another
  • Passing an object through a firewall as a JSON or XML string
  • Maintaining security or user-specific information across applications

JSON serialization

The Arrangement.Text.Json namespace contains classes for JavaScript Object Notation (JSON) serialization and deserialization. JSON is an open standard that is commonly used for sharing information beyond the spider web.

JSON serialization serializes the public properties of an object into a string, byte assortment, or stream that conforms to the RFC 8259 JSON specification. To control the way JsonSerializer serializes or deserializes an case of the grade:

  • Employ a JsonSerializerOptions object
  • Apply attributes from the Arrangement.Text.Json.Serialization namespace to classes or properties
  • Implement custom converters

Binary and XML serialization

The Organisation.Runtime.Serialization namespace contains classes for binary and XML serialization and deserialization.

Binary serialization uses binary encoding to produce compact serialization for uses such as storage or socket-based network streams. In binary serialization, all members, fifty-fifty members that are read-only, are serialized, and operation is enhanced.

XML serialization serializes the public fields and properties of an object, or the parameters and return values of methods, into an XML stream that conforms to a specific XML Schema definition language (XSD) document. XML serialization results in strongly typed classes with public properties and fields that are converted to XML. Organisation.Xml.Serialization contains classes for serializing and deserializing XML. You lot use attributes to classes and grade members to control the way the XmlSerializer serializes or deserializes an case of the class.

Making an object serializable

For binary or XML serialization, you need:

  • The object to be serialized
  • A stream to contain the serialized object
  • A Organization.Runtime.Serialization.Formatter instance

Use the SerializableAttribute attribute to a type to point that instances of the blazon can be serialized. An exception is thrown if you lot attempt to serialize simply the type doesn't accept the SerializableAttribute attribute.

To prevent a field from being serialized, apply the NonSerializedAttribute attribute. If a field of a serializable type contains a pointer, a handle, or some other data structure that is specific to a particular environs, and the field cannot be meaningfully reconstituted in a different environment, and so you may desire to arrive nonserializable.

If a serialized class contains references to objects of other classes that are marked SerializableAttribute, those objects will likewise be serialized.

Basic and custom serialization

Binary and XML serialization can be performed in two means, basic and custom.

Basic serialization uses .Net to automatically serialize the object. The only requirement is that the form has the SerializableAttribute attribute practical. The NonSerializedAttribute can be used to keep specific fields from being serialized.

When you use bones serialization, the versioning of objects may create problems. You would apply custom serialization when versioning bug are important. Basic serialization is the easiest mode to perform serialization, but it does not provide much command over the process.

In custom serialization, y'all can specify exactly which objects volition exist serialized and how it will be washed. The class must be marked SerializableAttribute and implement the ISerializable interface. If you want your object to be deserialized in a custom manner as well, use a custom constructor.

Designer serialization

Designer serialization is a special form of serialization that involves the kind of object persistence associated with development tools. Designer serialization is the process of converting an object graph into a source file that can later be used to recover the object graph. A source file can incorporate code, markup, or fifty-fifty SQL table information.

Organization.Text.Json overview Shows how to go the Organization.Text.Json library.

How to serialize and deserialize JSON in .Internet. Shows how to read and write object information to and from JSON using the JsonSerializer class.

Walkthrough: Persisting an Object in Visual Studio (C#)
Demonstrates how serialization can exist used to persist an object's data betwixt instances, allowing you to store values and remember them the next fourth dimension the object is instantiated.

How to read object data from an XML file (C#)
Shows how to read object data that was previously written to an XML file using the XmlSerializer course.

How to write object data to an XML file (C#)
Shows how to write the object from a class to an XML file using the XmlSerializer class.