94 lines
2.4 KiB
C#
94 lines
2.4 KiB
C#
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<T>(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<Type, XmlSerializer>();
|
|
}
|
|
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<T>(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<Type, XmlSerializer>();
|
|
}
|
|
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<Type, XmlSerializer> xmlSerializers;
|
|
}
|
|
}
|