view Implab/Xml/SerializersPool.cs @ 239:eedf4d834e67 v2

fix
author cin
date Wed, 13 Dec 2017 19:54:45 +0300
parents 5f7a3e1d32b9
children 6691aff01de1
line wrap: on
line source

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<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);
            }
        }

    }
}