A simple helper class
using System.Xml.Serialization; ... public static class XmlSerializationHelper { // Serialize the given type (only reference types) to an Xml string // Catches any exceptions // Eg: // string xmlString = SerializationHelper.SerializeToXml<MyClass>(myClass); public static string TrySerializeToXml<T>(this T targetObj, params Type[] extraTypes) where T : class // (only reference types) { string res = string.Empty; try { StringBuilder builder = new StringBuilder(); XmlSerializer xmlSerializer = new XmlSerializer(typeof (T), extraTypes); xmlSerializer.Serialize(new StringWriter(builder), targetObj); res = builder.ToString(); } catch (Exception ex) { Trace.WriteLine("SerializationHelper.SerializeToXml<T>: " + "Exception occurred during deserialization " + ex.ToString()); Debug.Assert(false, "Exception occurred during serialization " + ex.ToString()); } return res; } // Deserialize the given type (only reference types) from an Xml string // Eg: // MyClass myObj = SerializationHelper.DeserializeFromXml<MyClass> //(xmlString); public static T TryDeserializeFromXml<T>(this string xml, params Type[] extraTypes) where T : class // (only reference types) { T obj = null; try { XmlSerializer xmlSerializer = new XmlSerializer(typeof (T), extraTypes); obj = (T) xmlSerializer.Deserialize(new StringReader(xml)); } catch (Exception ex) { Trace.WriteLine("SerializationHelper.DeserializeFromXml<T>: " + "Exception occurred during deserialization " + ex.ToString()); Debug.Assert(false, "Exception occurred during deserialization " + ex.ToString()); } return obj; } // Serialize the given type (only reference types) to an Xml filePath public static void TrySerializeToXmlFile<T>(this T targetObj, string filePath, params Type[] extraTypes) where T : class // (only reference types) { try { using (TextWriter tw = new StreamWriter(filePath)) { XmlSerializer xmlSerializer = new XmlSerializer(typeof (T), extraTypes); xmlSerializer.Serialize(tw, targetObj); tw.Close(); } } catch (Exception ex) { Trace.WriteLine("SerializationHelper.SerializeToXml<T>: " + "Exception occurred during deserialization " + ex.ToString()); Debug.Assert(false, "Exception occurred during serialization " + ex.ToString()); } } // Deserialize the given type (only reference types) from an Xml filePath public static T TryDeserializeFromXmlFile<T>(FileInfo file, params Type[] extraTypes) where T : class // (only reference types) { T obj = null; try { using (Stream fs = new FileStream(file.FullName, FileMode.Open)) { // Use an XmlReader as according to the MSDN documentation it // "automatically detects and uses the encoding specified by // the XML document." using (XmlReader xmlReader = new XmlTextReader(fs)) { XmlSerializer serializer = new XmlSerializer(typeof (T), extraTypes); obj = (T) serializer.Deserialize(xmlReader); } } //using (TextReader tr = new StreamReader(file.FullName)) //{ // XmlSerializer serializer = new XmlSerializer(typeof (T), extraTypes); // obj = (T) serializer.Deserialize(tr); // tr.Close(); //} } catch (Exception ex) { Trace.WriteLine("SerializationHelper.TryDeserializeFromXmlFile<T>: " + "Exception occurred during deserialization " + ex.ToString()); Debug.Assert(false, "Exception occurred during deserialization " + ex.ToString()); } return obj; } }Using this XmlSerialiser/Deserialiser sample
class XmlSerialiserDeserialiserTester { public void TestTaskSerialisation() { string testPath = Path.Combine(Path.GetTempPath(), "TestSerializer.xml"); TaskManager tm = new TaskManager(); tm.Add(new Task { When = Task.WhenEnum.Fortnight, Displayable = true, Description = "Buy water proofing spray" }); string serialised = tm.TrySerializeToXml<taskmanager>(); // Serialize Debug.WriteLine(serialised); TaskManager dtm = serialised.TryDeserializeFromXml<taskmanager>(); // Deserialize Debug.Assert(tm.Count == dtm.Count); Debug.Assert(tm[0].Description.Equals(dtm[0].Description, StringComparison.InvariantCultureIgnoreCase)); } } public class TaskManager : List<Task> { } public class Task { public enum WhenEnum { Fortnight = 1, Month = 2, Year = 3, } public WhenEnum When { get; set; } public bool Displayable { get; set; } public string Description { get; set; } }
No comments:
Post a Comment