由于xml序列化会带来很大的性能损失,我们往往采用缓存来保存数据
序列化和反序列化代码
public static class Helper
{
static Hashtable xmlserialCache = new Hashtable();
static XmlSerializer GetXmlSerializer(Type type, string defaultNameSpace)
{
string key = string.Concat(type.Name, defaultNameSpace).GetHashCode().ToString();
if (!xmlserialCache.ContainsKey(key))
{
lock (xmlserialCache.SyncRoot)
{
if (!xmlserialCache.ContainsKey(key))
{
xmlserialCache.Add(key, new XmlSerializer(type, defaultNameSpace));
}
}
}
return xmlserialCache[key] as XmlSerializer;
}
public static T GetInstance<T>(string xml) where T : class
{
object obj = null;
using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
{
using (XmlTextReader xmlTextReader = new XmlTextReader(memoryStream))
{
xmlTextReader.WhitespaceHandling = WhitespaceHandling.All;
XmlSerializer xmlSerializer = GetXmlSerializer(typeof(T), string.Empty);
obj = xmlSerializer.Deserialize(xmlTextReader);
}
}
return obj as T;
}
public static string ToXml<T>(T t) where T : class
{
string xml = string.Empty;
using (MemoryStream rawMemoryStream = new MemoryStream())
{
using (XmlTextWriter xmlTextWriter = new XmlTextWriter(rawMemoryStream, Encoding.UTF8))
{
xmlTextWriter.Formatting = Formatting.Indented;
//xmlTextWriter.Formatting = Formatting.None;
XmlSerializer xmlSerializer = GetXmlSerializer(typeof(T), string.Empty);
xmlSerializer.Serialize(xmlTextWriter, t);
xml = Encoding.UTF8.GetString(rawMemoryStream.GetBuffer(), 0, (int)rawMemoryStream.Length);
}
}
return xml;
}
}
使用代码:
原始的xml文件