using Implab.Components; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; using System.Xml.Serialization; namespace Implab.Xml { public class SerializersPool : ObjectPool { static readonly SerializersPool _instance = new SerializersPool(); public static SerializersPool Instance { get { return _instance; } } #region implemented abstract members of ObjectPool protected override XmlSerializer CreateInstance() { return new XmlSerializer(typeof(T)); } #endregion public T DeserializeFromString(string data) { using (var reader = new StringReader(data)) { return Deserialize(reader); } } public T Deserialize(TextReader reader) { var sr = Allocate(); try { return (T)sr.Deserialize(reader); } finally { Release(sr); } } public T Deserialize(XmlReader reader) { var sr = Allocate(); try { return (T)sr.Deserialize(reader); } finally { Release(sr); } } public string SerializeAsString(T data) { using (var writer = new StringWriter()) { Serialize(writer, data); return writer.ToString(); } } public void Serialize(TextWriter writer, T data) { var sr = Allocate(); try { sr.Serialize(writer, data); } finally { Release(sr); } } public void Serialize(XmlWriter writer, T data) { var sr = Allocate(); try { sr.Serialize(writer, data); } finally { Release(sr); } } } }