.NET API Reference

System.Xml.XmlSerializer Class

The XmlSerializer class provides functionality to serialize objects to XML format and deserialize XML data back into objects.

Overview
Syntax
Examples
Remarks
See Also

Namespace

System.Xml.Serialization

Assembly

System.Xml.dll

Constructors

public XmlSerializer(Type type);
public XmlSerializer(Type type, string defaultNamespace);
public XmlSerializer(Type type, XmlAttributeOverrides overrides);
public XmlSerializer(Type type, XmlRootAttribute root);
public XmlSerializer(Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, string defaultNamespace);

Methods

public void Serialize(Stream stream, object o);
public void Serialize(TextWriter textWriter, object o);
public void Serialize(XmlWriter xmlWriter, object o);
public object Deserialize(Stream stream);
public object Deserialize(TextReader textReader);
public object Deserialize(XmlReader xmlReader);
public XmlSerializerNamespaces? GetAllNamespaces();

Serializing an Object

using System;
using System.IO;
using System.Xml.Serialization;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        var p = new Person { Name = "Alice", Age = 30 };
        var serializer = new XmlSerializer(typeof(Person));

        using var writer = new StringWriter();
        serializer.Serialize(writer, p);
        Console.WriteLine(writer.ToString());
    }
}

Deserializing XML

using System;
using System.IO;
using System.Xml.Serialization;

class Program
{
    static void Main()
    {
        string xml = @"<Person><Name>Bob</Name><Age>45</Age></Person>";
        var serializer = new XmlSerializer(typeof(Person));

        using var reader = new StringReader(xml);
        var person = (Person)serializer.Deserialize(reader);
        Console.WriteLine($"{person.Name} is {person.Age} years old.");
    }
}

The XmlSerializer generates temporary assemblies to perform serialization. For high‑performance scenarios, consider using DataContractSerializer or source‑generated serializers.

  • Only public read/write properties and fields are serialized by default.
  • Attributes such as [XmlElement], [XmlAttribute], and [XmlIgnore] control the XML output.
  • When serializing generic types, provide the additional types via the constructor overload.