.NET Questions and Solutions

As a software engineer, I focus on .NET, especially asp.net, C#, WCF and so on, and I am also very interested in Search Engine Optimization.

Entries Tagged ‘Serialization’

Binary serialization exceptions occur when you serialize or deserialize the DateTimeFormatInfo class or the TextInfo class between different versions of the .NET Framework

Symptoms
When you serialize or deserialize the DateTimeFormatInfo class or the TextInfo class between a computer that is running the Microsoft .NET Framework 2.0 Service Pack 1 (SP1) and a computer that is running a pre-SP1 version of the .NET Framework 2.0, you receive one of the following binary serialization exceptions:
Exception 1

Exception type: System.Runtime.Serialization.Serialization
ExceptionMessage: Binary stream ‘0′ does not contain a valid BinaryHeader. Possible causes are invalid stream or object version change between serialization and deserialization.Exception 2

Exception type: System.ArgumentNull
ExceptionMessage: Value cannot be null.This problem occurs when you serializethe DateTimeFormatInfo class and the TextInfo class by setting the TypeFormat property of the BinaryFormatter class to FormatterTypeStyle.XsdString.
Resolution
This problem occurs because the FormatterTypeStyle.XsdString serialization formatting and the FormatterTypeStyle.TypesWhenNeeded serialization formatting drop type information for performance reasons when you serialize types across different versions of the .NET Framework.

How to serialize an object to XML by using Visual C#

Requirements

The following list outlines the recommended hardware, software, network infrastructure, and service packs that are required:

  • Microsoft Visual Studio

This article assumes that you are familiar with the following topics:

  • General familiarity with XML
  • General familiarity with Visual C#
XML Serialization

Serialization is the process of taking the state of an object and persisting it in some fashion. The Microsoft .NET Framework includes powerful objects that can serialize any object to XML. The System.Xml.Serialization namespace provides this capability.
Follow these steps to create a console application that creates an object, and then serializes its state to XML:

  1. In Visual C#, create a new Console Application project.
  2. On the Project menu, click Add Class to add a new class to the project.
  3. In the Add New Item dialog box, change the name of the class to clsPerson.
  4. Click Add. A new class is created.
    Note In Visual Studio .NET 2003, click Open.
  5. Add the following code after the Public Class clsPerson statement

     public   string FirstName;
     public   string MI;
     public   string LastName;
  6. Switch to the code window for Program.cs in Visual Studio or for Class1.cs in Visual Studio .NET 2003.
  7. In the void Main method, declare and create an instance of the clsPerson class:

    clsPerson p = new clsPerson();
  8. Set the properties of the clsPerson object:

    p.FirstName = "Jeff";
    p.MI = "A";
    p.LastName = "Price";
  9. The Xml.Serialization namespace contains an XmlSerializer class that serializes an object to XML. When you create an instance of XmlSerializer, you pass the type of the class that you want to serialize into its constructor:

    System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(p.GetType());
  10. The Serialize method is used to serialize an object to XML. Serialize is overloaded and can send output to a TextWriter, Stream, or XMLWriter object. In this example, you send the output to the console:

    x.Serialize(Console.Out,p);
    Console.WriteLine();
    Console.ReadLine();