Page tree

Introduction

The .NET framework offers many serializer, namely, binary serialization and XML serialization and JavaScriptSerializer. Binary serialization preserves the state of the object between different invocations of an application by preserving type fidelity. XML serialization uses XML as an open standard to serialize only the public properties and fields. It does not preserve type fidelity but provides support for serialization in human-readable, cross-platform XML. The framework provides many options to customize the serialization process to meet application requirements.

Xsd2code++ takes care of adding the set of attributes that are necessary for serialization/deserialization process, but also the serialization methods in memory or on disk. Serialization is a process that has many options and subtleties. This is why xsd2code++ brings a simple solution to automatically integrate these mechanisms into your classes without you having to worry about it.

Binary serialization and XML are integrated into the Dotnet FrameWork, you have no additional libraries to reference in your project. Xsd2code++ allows serialization through other solutions. As is NewtonSoft.JSON, MessagePack. In this case external libraries must be added to your project.


To summarize the different serialization possibilities are :


To enable the generation of serialization methods, you must activate the option in the Serialization section as shown below :

xsd2code enable serialization


Serialization mechanisms are based on reflection where the names of public properties are used. However, certain attributes make it possible to refine the serialization mechanisms. It is therefore very important to activate the generation of attributes according to the choice of serialization.

serialization attributes


Then many parameters are available to customize method names, encoding, conditional serialization mechanisms. These options are described in the chapters below:

XML Serialization

JSon Serialization

MessagePack serialization

BSon serialization

Lorsque la sérialisation est activé, chacune des classes contient les méthodes de sérialization, tel que :

public virtual string Serialize() {...}
public virtual void SaveToFile(string fileName)public virtual bool SaveToFile(string fileName, out Exception exception) {...}
public static bool Deserialize(string input, out USAddress obj, out Exception exception) {...}
public static bool Deserialize(string input, out USAddress obj) {...}
public new static USAddress Deserialize(string input) {...}
public static USAddress Deserialize(Stream s) {...}
public static bool LoadFromFile(string fileName, out USAddress obj, out Exception exception) {...}
public static bool LoadFromFile(string fileName, out USAddress obj) {...}

This makes it extremely easy to serialize/deserialize either in memory or in a file.

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            PurchaseOrderType po = new PurchaseOrderType();
            po.BillTo.country = "us";
            po.BillTo.name = "James";
            po.BillTo.street = "19 av road street";

            // Serialization in memory
            string serializedJsonObject = po.Serialize();

            // Serialization to file
            po.SaveToFile(@"c:\temp\po.json");

            // Deserialization from memory
            PurchaseOrderType deserilizedObject = PurchaseOrderType.Deserialize(serializedJsonObject);

            // Deserialization from file
            PurchaseOrderType deserilizedObjectFromFile = PurchaseOrderType.LoadFromFile(@"c:\temp\po.json");
        }

DefaultEncoder / EnableEncoding

It is possible to choose the encoding format of the file. The defaultEncoder parameter allows to define the encoding that will be used when calling the SaveToFile method. For example UTF8. An overload of the SaveToFile method allows to choose another encoding. This default encoding is also used for the LoadFromFile method call. The different possibilities are :

  • UTF8
  • UTF32
  • BigEndianUnicode
  • Unicode
  • ASCII
            Console.WriteLine("Hello World!");
            PurchaseOrderType po = new PurchaseOrderType();
            po.BillTo.country = "us";
            po.BillTo.name = "James";
            po.BillTo.street = "19 av road street";

            // Serialization to file
            po.SaveToFile(@"c:\temp\po.json", System.Text.Encoding.UTF8);

            // Deserialization from file
            PurchaseOrderType deserilizedObjectFromFile = PurchaseOrderType.LoadFromFile(@"c:\temp\po.json", System.Text.Encoding.UTF8);

Serialization/deserilization methods name

You have the possibility to change the name of the default serialization/deserialization methods. 

serialization methods name

For example, LoadFromFile can be replaced by FromXMLFile, SaveToFile by ToXMLFile. It's up to you to choose according to your naming convention.

ShouldSerialize

This parameter allows you to reduce the size of your XML or JSon streams for values that do not need to be serialized. xsd2code++ depending on the type proposes the following cases :

xsd2code shouldserialize

This parameter is part of the flow reduction strategy that is described in the article : 

Howto minify JSON or XML data




  • No labels