using System; using System.Xml; using System.Xml.XPath; using System.Xml.Serialization; using System.IO; namespace OrdersMgmt.Framework { /// /// Summary description for XMLSerializer. /// public class XSerializer { public static object deserialize(string path,object source) { XmlSerializer ser = new XmlSerializer(source.GetType()); StreamReader reader = new StreamReader(path); try { source = ser.Deserialize(reader); } catch { reader.DiscardBufferedData(); reader.Close(); throw new Exception("could not deserialize object"); } finally { reader.DiscardBufferedData(); reader.Close(); } return source; } public static object deserialize(XmlReader reader ,object source) { XmlSerializer ser = new XmlSerializer(source.GetType()); MemoryStream ms; StreamWriter writer = null; try { reader.MoveToContent(); string xmlstring = reader.ReadOuterXml(); reader.Close(); ms = new MemoryStream(); writer = new StreamWriter(ms); writer.Write(xmlstring); writer.Flush(); ms.Position = 0; source = ser.Deserialize(ms); ms.Close(); writer.Close(); } catch(InvalidOperationException iex) { if(reader.ReadState != ReadState.Closed) reader.Close(); if(writer!=null) writer.Close(); throw new Exception("error deserializing object from xml reader",iex); } finally { if(reader.ReadState != ReadState.Closed) reader.Close(); if(writer!=null) writer.Close(); } return source; } public static void serialize(ref StreamWriter writer,object source,XmlSerializer ser) { try { ser.Serialize(writer,source); } catch { writer.Flush(); writer.Close(); throw new Exception("could not serialize object"); } finally { writer.Flush(); writer.Close(); } } public static void serialize(ref MemoryStream writer,object source,XmlSerializer ser) { try { ser.Serialize(writer,source); } catch { writer.Flush(); writer.Close(); throw new Exception("could not serialize object"); } finally { writer.Flush(); writer.Close(); } } public static void serialize(string path, object source) { serialize(path,source,source.GetType()); } public static void serialize(string path, object source,Type type) { XmlSerializer ser = new XmlSerializer(type); StreamWriter writer = new StreamWriter(path); serialize(ref writer,source,ser); } public XPathDocument serializeToXPathDocument(object source) { MemoryStream ms = new MemoryStream(); XmlSerializer ser = new XmlSerializer(source.GetType()); serialize(ref ms,source,ser); return new XPathDocument(ms); } } }