using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Common { public class SerializationHelper { private static Dictionary serializer_dict = new Dictionary(); private SerializationHelper() { } public static XmlSerializer GetSerializer(Type t) { int hashCode = t.GetHashCode(); if (!SerializationHelper.serializer_dict.ContainsKey(hashCode)) { SerializationHelper.serializer_dict.Add(hashCode, new XmlSerializer(t)); } return SerializationHelper.serializer_dict[hashCode]; } public static object Load(Type type, string filename) { FileStream fileStream = null; object result; try { fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); XmlSerializer xmlSerializer = new XmlSerializer(type); result = xmlSerializer.Deserialize(fileStream); } catch (Exception ex) { throw ex; } finally { if (fileStream != null) { fileStream.Close(); } } return result; } public static bool Save(object obj, string filename) { bool result = false; FileStream fileStream = null; try { fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType()); xmlSerializer.Serialize(fileStream, obj); result = true; } catch (Exception ex) { throw ex; } finally { if (fileStream != null) { fileStream.Close(); } } return result; } public static string Serialize(object obj) { string result = ""; XmlSerializer serializer = SerializationHelper.GetSerializer(obj.GetType()); MemoryStream memoryStream = new MemoryStream(); XmlTextWriter xmlTextWriter = null; StreamReader streamReader = null; try { xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); xmlTextWriter.Formatting = Formatting.Indented; serializer.Serialize(xmlTextWriter, obj); memoryStream.Seek(0L, SeekOrigin.Begin); streamReader = new StreamReader(memoryStream); result = streamReader.ReadToEnd(); } catch (Exception ex) { throw ex; } finally { if (xmlTextWriter != null) { xmlTextWriter.Close(); } if (streamReader != null) { streamReader.Close(); } memoryStream.Close(); } return result; } public static object DeSerialize(Type type, string s) { byte[] bytes = Encoding.UTF8.GetBytes(s); object result; try { XmlSerializer serializer = SerializationHelper.GetSerializer(type); result = serializer.Deserialize(new MemoryStream(bytes)); } catch (Exception ex) { throw ex; } return result; } } }