//New BSD License (BSD)
//http://twitterxml.codeplex.com/license
using System;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace TwitterXml.Utilities
{
public class XmlSerializerHelper
{
/// <summary>
/// Deserializes an xml document back into an object
/// </summary>
/// <param name="xml">The xml data to deserialize</param>
/// <param name="type">The type of the object being deserialized</param>
/// <returns>A deserialized object</returns>
public static object Deserialize(XmlDocument xml, Type type)
{
XmlSerializer s = new XmlSerializer(type);
string xmlString = xml.OuterXml.ToString();
byte[] buffer = ASCIIEncoding.UTF8.GetBytes(xmlString);
MemoryStream ms = new MemoryStream(buffer);
XmlReader reader = new XmlTextReader(ms);
Exception caught = null;
try
{
object o = s.Deserialize(reader);
return o;
}
catch (Exception e)
{
caught = e;
}
finally
{
reader.Close();
if (caught != null)
throw caught;
}
return null;
}
/// <summary>
/// Serializes an object into an Xml Document
/// </summary>
/// <param name="o">The object to serialize</param>
/// <returns>An Xml Document consisting of said object's data</returns>
public static XmlDocument Serialize(object o)
{
XmlSerializer s = new XmlSerializer(o.GetType());
MemoryStream ms = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(ms, new UTF8Encoding());
writer.Formatting = Formatting.Indented;
writer.IndentChar = ' ';
writer.Indentation = 5;
Exception caught = null;
try
{
s.Serialize(writer, o);
XmlDocument xml = new XmlDocument();
string xmlString = ASCIIEncoding.UTF8.GetString(ms.ToArray());
xml.LoadXml(xmlString);
return xml;
}
catch (Exception e)
{
caught = e;
}
finally
{
writer.Close();
ms.Close();
if (caught != null)
throw caught;
}
return null;
}
}
}
|