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
(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);}