using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Text; using System.Xml; using System.Xml.Serialization; using CPF.ReoGrid.Common; namespace CPF.ReoGrid.Utility { internal static class XMLHelper { public static T LoadXML(Stream s) where T : class { Type typeFromHandle = typeof(T); Stopwatch stopwatch = Stopwatch.StartNew(); T result; try { XmlSerializer xmlSerializer = null; bool flag = XMLHelper.xmlSerializers == null; if (flag) { XMLHelper.xmlSerializers = new Dictionary(); } bool flag2 = !XMLHelper.xmlSerializers.TryGetValue(typeFromHandle, out xmlSerializer); if (flag2) { xmlSerializer = (XMLHelper.xmlSerializers[typeFromHandle] = new XmlSerializer(typeFromHandle)); } result = (xmlSerializer.Deserialize(s) as T); } finally { stopwatch.Stop(); Logger.Log("xml utility", "type loaded: {0}, {1} ms.", new object[] { typeFromHandle.Name, stopwatch.ElapsedMilliseconds }); } return result; } public static void SaveXML(Stream s, T obj) { Type typeFromHandle = typeof(T); Stopwatch stopwatch = Stopwatch.StartNew(); try { XmlSerializer xmlSerializer = null; bool flag = XMLHelper.xmlSerializers == null; if (flag) { XMLHelper.xmlSerializers = new Dictionary(); } bool flag2 = !XMLHelper.xmlSerializers.TryGetValue(typeFromHandle, out xmlSerializer); if (flag2) { xmlSerializer = (XMLHelper.xmlSerializers[typeFromHandle] = new XmlSerializer(typeFromHandle)); } XmlSerializerNamespaces namespaces = null; FieldInfo field = obj.GetType().GetField("xmlns", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); bool flag3 = field != null; if (flag3) { namespaces = (field.GetValue(obj) as XmlSerializerNamespaces); } XmlWriterSettings settings = new XmlWriterSettings { Encoding = Encoding.UTF8 }; using (XmlWriter xmlWriter = XmlWriter.Create(s, settings)) { xmlSerializer.Serialize(xmlWriter, obj, namespaces); } } finally { stopwatch.Stop(); Logger.Log("xml utility", "type saved: {0}, {1} ms.", new object[] { typeFromHandle.Name, stopwatch.ElapsedMilliseconds }); } } private static Dictionary xmlSerializers; } }