Serialize an object to XElement and Deserialize it in memory Serialize an object to XElement and Deserialize it in memory xml xml

Serialize an object to XElement and Deserialize it in memory


You can use these two extension methods to serialize and deserialize between XElement and your objects.

public static XElement ToXElement<T>(this object obj){    using (var memoryStream = new MemoryStream())    {        using (TextWriter streamWriter = new StreamWriter(memoryStream))        {            var xmlSerializer = new XmlSerializer(typeof(T));            xmlSerializer.Serialize(streamWriter, obj);            return XElement.Parse(Encoding.ASCII.GetString(memoryStream.ToArray()));        }    }}public static T FromXElement<T>(this XElement xElement){        var xmlSerializer = new XmlSerializer(typeof(T));        return (T)xmlSerializer.Deserialize(xElement.CreateReader());}

USAGE

XElement element = myClass.ToXElement<MyClass>();var newMyClass = element.FromXElement<MyClass>();


You can use XMLSerialization

XML serialization is the process of converting an object's public properties and fields to a serial format (in this case, XML) for storage or transport. Deserialization re-creates the object in its original state from the XML output. You can think of serialization as a way of saving the state of an object into a stream or buffer. For example, ASP.NET uses the XmlSerializer class to encode XML Web service messages

and XDocument Represents an XML document to achieve this

   using System;using System.Linq;using System.Xml;using System.Xml.Linq;using System.Xml.Serialization;namespace ConsoleApplication5{  public class Person  {    public int Age { get; set; }    public string Name { get; set; }  }  class Program  {    static void Main(string[] args)    {      XmlSerializer xs = new XmlSerializer(typeof(Person));      Person p = new Person();      p.Age = 35;      p.Name = "Arnold";      Console.WriteLine("\n Before serializing...\n");      Console.WriteLine(string.Format("Age = {0} Name = {1}", p.Age,p.Name));      XDocument d = new XDocument();      using (XmlWriter xw = d.CreateWriter())        xs.Serialize(xw, p);      // you can use LINQ on elm now      XElement elm = d.Root;      Console.WriteLine("\n From XElement...\n");      elm.Elements().All(e => { Console.WriteLine(string.Format("element name {0} , element value {1}", e.Name, e.Value)); return true; });      //deserialize back to object      Person pDeserialized = xs.Deserialize((d.CreateReader())) as Person;      Console.WriteLine("\n After deserializing...\n");      Console.WriteLine(string.Format("Age = {0} Name = {1}", p.Age, p.Name));      Console.ReadLine();    }  }}

and here is output enter image description here


(Late answer)

Serialize:

var doc = new XDocument();var xmlSerializer = new XmlSerializer(typeof(MyClass));using (var writer = doc.CreateWriter()){    xmlSerializer.Serialize(writer, obj);}// now you can use `doc`(XDocument) or `doc.Root` (XElement)

Deserialize:

MyClass obj; using(var reader = doc.CreateReader()){    obj = (MyClass)xmlSerializer.Deserialize(reader);}