Introduction

Here are the steps to serialize and deserialize an object as XML data.

Serialization: Converts Object to XML

DeSerialization: Converts XML to Object

Step 1: Used Namespaces:

using System;

using System.IO;

using System.Collections.Generic;

using System.Xml;

using System.Xml.Serialization;

Step 2: Usage:

SerilizeList();
DeSerilizeList();

Step 3: Used List for Demo:

public
List<Product> GetProductList()
{

List<Product> list = new List<Product>();

Product product = new Product(new Section[3]);

product.Sections[0] = new Section("1", new Header[3]);

product.Sections[0].Headers[0] = new Header("P1", "C1", "T1");

product.Sections[0].Headers[1] = new Header("P2", "C2", "T2");

product.Sections[1] = new Section("2", new Header[3]);

product.Sections[1].Headers[0] = new Header("P1", "C1", "T1");

product.Sections[1].Headers[1] = new Header("P2", "C2", "T2");

list.Add(product);

return list;

}

Step 4: Serializing the List<T> to XML:

//Serializing the List

public void SerilizeList()
{
//Creating Custom List
List
<Product> list = GetProductList();
Serialize<Product>(list);
}

//Generic serialize

private void Serialize<T>(List<Product> list)

{

//Creating XmlSerializer.

XmlSerializer serializer = new XmlSerializer(typeof(List<T>));

//Creating text writer for xml data

TextWriter tw = new StreamWriter(Server.MapPath("book1.xml"));

//Convert the XML to List

serializer.Serialize(tw, list);

tw.Close();
}

Step 5: Output of Serializing:

<?xml version="1.0" encoding="utf-8"?>

<ArrayOfProduct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Product>

<Sections>

<Section Name="1">

<Headers>

<Header PropertyName="P1" ClassName="C1">T1</Header>

<Header PropertyName="P2" ClassName="C2">T2</Header>

<Header xsi:nil="true" />

</Headers>

</Section>

<Section Name="2">

<Headers>

<Header PropertyName="P1" ClassName="C1">T1</Header>

<Header PropertyName="P2" ClassName="C2">T2</Header>

<Header xsi:nil="true" />

</Headers>

</Section>

<Section xsi:nil="true" />

</Sections>

</Product>

</ArrayOfProduct>

Step 6: Deserializing the XML to List<T>:

//Serializing the List

public
void DeSerilizeList()
{
//Getting the DeSerialized list of product.

List
<Product> b = GenericDeSerialize<Product>();

//Displays the results

foreach (Product product in b)

{

Response.Write(product.Sections[0].Name + ",");

Response.Write(product.Sections[1].Name);

}

}

//Deserialize
public List<T> GenericDeSerialize<T>()
{

//Creating XmlSerializer for the object

XmlSerializer serializer = new XmlSerializer(typeof(List<T>));

//Geting XMl from the file.

TextReader tr = new StreamReader(Server.MapPath("book1.xml"));

//Deserialize back to object from XML

List<T> b = (List<T>)serializer.Deserialize(tr);

tr.Close();

return b;
}

Step 7: Output of Deserialize:

1.jpg

Step 8: List has no collection:

<?xml version="1.0" encoding="utf-8"?>

<ArrayOfProduct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Product />

</ArrayOfProduct>

Step 9: Copy and paste the following code snippet:

using System.Xml;

using System.Xml.Serialization;

namespace SampleApplication

{

public partial class SerializeMe : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

SerilizeList();

DeSerilizeList();

}

//Serializing the List

public void SerilizeList()

{

//Creating Custom List

List<Product> list = GetProductList();

Serialize<Product>(list);

}

//Generic serialize

private void Serialize<T>(List<Product> list)

{

//Creating XmlSerializer.

XmlSerializer serializer = new XmlSerializer(typeof(List<T>));

//Creating text writer for xml data

TextWriter tw = new StreamWriter(Server.MapPath("book1.xml"));

//Convert the XML to List

serializer.Serialize(tw, list);

tw.Close();

}

//Serializing the List

public void DeSerilizeList()

{

//Getting the DeSerialized list of product.

List<Product> b = GenericDeSerialize<Product>();

//Displays the results

foreach (Product product in b)

{

Response.Write(product.Sections[0].Name + ",");

Response.Write(product.Sections[1].Name);

}

}

//Deserialize

public List<T> GenericDeSerialize<T>()

{

//Creating XmlSerializer for the object

XmlSerializer serializer = new XmlSerializer(typeof(List<T>));

//Geting XMl from the file.

TextReader tr = new StreamReader(Server.MapPath("book1.xml"));

//Deserialize back to object from XML

List<T> b = (List<T>)serializer.Deserialize(tr);

tr.Close();

return b;

}

public List<Product> GetProductList()

{

List<Product> list = new List<Product>();

Product product = new Product(new Section[3]);

product.Sections[0] = new Section("1", new Header[3]);

product.Sections[0].Headers[0] = new Header("P1", "C1", "T1");

product.Sections[0].Headers[1] = new Header("P2", "C2", "T2");

product.Sections[1] = new Section("2", new Header[3]);

product.Sections[1].Headers[0] = new Header("P1", "C1", "T1");

product.Sections[1].Headers[1] = new Header("P2", "C2", "T2");

list.Add(product);

return list;

}
}

Used Class For Demo:

public class Product

{

public Product()

{

}

public Product(Section[] sections)

{

this.Sections = sections;

}

public Section[] Sections;

}

public class Section

{

public Section()

{

}

public Section(string name, Header[] headers)

{

this.Name = name;

this.Headers = headers;

}

[XmlAttribute]

public string Name;

public Header[] Headers;

}

public class Header

{

public Header()

{

}

public Header(string propertyName, string className, string text)

{

this.PropertyName = propertyName;

this.ClassName = className;

this.Text = text;

}

[XmlAttribute]

public string PropertyName;

[XmlAttribute]

public string ClassName;

[XmlText]

public string Text;

}
}

Thanks for reading this article. Have a nice day.