SerializersPool.cs
77 lines
| 2.1 KiB
| text/x-csharp
|
CSharpLexer
cin
|
r229 | 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 { | ||||
cin
|
r278 | [Obsolete("this class will be removed, use XmlDefaultSerializer")] | ||
cin
|
r229 | public class SerializersPool<T> : ObjectPool<XmlSerializer> { | ||
static readonly SerializersPool<T> _instance = new SerializersPool<T>(); | ||||
public static SerializersPool<T> 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); | ||||
} | ||||
} | ||||
} | ||||
} | ||||