/Serialization/XmlSerializerCache.cs |
@@ -8,19 +8,18 @@ |
using System; |
using System.Collections.Generic; |
using System.IO; |
using System.Text; |
using System.Linq; |
using System.Threading; |
using System.Xml; |
using System.Xml.Linq; |
using System.Xml.Serialization; |
using wasSharp; |
|
namespace wasSharpNET.Serialization |
{ |
public static class XmlSerializerCache |
{ |
private static ReaderWriterLockSlim SerializerCacheLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); |
private static Dictionary<string, XmlSerializer> SerializerCache = new Dictionary<string, XmlSerializer>(); |
private static readonly ReaderWriterLockSlim SerializerCacheLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); |
private static readonly Dictionary<string, XmlSerializer> SerializerCache = new Dictionary<string, XmlSerializer>(); |
|
public static XmlSerializer GetSerializer<T>() |
{ |
@@ -39,15 +38,14 @@ |
|
public static XmlSerializer GetSerializer(Type MainTypeForSerialization, Type[] ExtraTypes) |
{ |
string Signature = MainTypeForSerialization.FullName; |
var Signature = MainTypeForSerialization.FullName; |
if (ExtraTypes != null) |
{ |
foreach (Type Tp in ExtraTypes) |
Signature += "-" + Tp.FullName; |
Signature = ExtraTypes.Aggregate(Signature, (current, tp) => current + ("-" + tp.FullName)); |
} |
|
SerializerCacheLock.EnterReadLock(); |
XmlSerializer XmlEventSerializer = null; |
XmlSerializer XmlEventSerializer; |
if (SerializerCache.TryGetValue(Signature, out XmlEventSerializer)) |
{ |
SerializerCacheLock.ExitReadLock(); |
@@ -77,7 +75,7 @@ |
{ |
using (var XmlReader = XmlData.Root.CreateReader()) |
{ |
return (T)GetSerializer<T>(ExtraTypes).Deserialize(XmlReader); |
return (T) GetSerializer<T>(ExtraTypes).Deserialize(XmlReader); |
} |
} |
catch (Exception ex) |
@@ -122,7 +120,7 @@ |
{ |
using (var xmlWriter = XmlWriter.Create(memoryStream, new XmlWriterSettings { Indent = true })) |
{ |
XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); |
var ns = new XmlSerializerNamespaces(); |
ns.Add(string.Empty, string.Empty); |
GetSerializer<T>(ExtraTypes).Serialize(xmlWriter, Object, ns); |
xmlWriter.Flush(); |
@@ -150,7 +148,7 @@ |
|
public static T Deserialize<T>(Stream stream) |
{ |
using (MemoryStream memoryStream = new MemoryStream()) |
using (var memoryStream = new MemoryStream()) |
{ |
stream.CopyTo(memoryStream); |
memoryStream.Position = 0L; |