От System.Object к обобщению - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Пытаюсь перейти от использования System.Object к обобщениям. Исходный класс:
    public interface ISerializer
    {
        void Serialize(object _serializableobject, string _filename);
        object Deserialize(string _filename, Type _type);
    }
 
public class MySingletonXmlSerializer : ISerializer
    {
        private static readonly Lazy<MySingletonXmlSerializer> _instance = new Lazy<MySingletonXmlSerializer>(() => new MySingletonXmlSerializer());
 
        public static MySingletonXmlSerializer Instance { get { return _instance.Value; } }
   
        private MySingletonXmlSerializer() { }
 
        public void Serialize(object _serializableobject, string _filename)
        {
            XmlSerializer serializer = new XmlSerializer(_serializableobject.GetType());
            using (FileStream fs = new FileStream(_filename, FileMode.Create))
            {
                serializer.Serialize(fs, _serializableobject);
            }
        }
 
        public object Deserialize(string _filename, Type _type)
        {
            if (!string.IsNullOrEmpty(_filename) && System.IO.File.Exists(_filename))
            {
                XmlSerializer serializer = new XmlSerializer(_type);
                using (FileStream fs = new FileStream(_filename, FileMode.Open))
                {
                    return serializer.Deserialize(fs);
                }
            }
 
            else
                return null; //null возвращается намеренно
        } 
 
    }
Добавил обобщение в интерфейс и класс:
    public interface ISerializer<T>
    {
        void Serialize(T _serializableobject, string _filename);
        object Deserialize(string _filename, Type _type);
    }
 
    public class MySingletonXmlSerializer<T> : ISerializer<T>
    {
        private static readonly Lazy<MySingletonXmlSerializer<T>> _instance = new Lazy<MySingletonXmlSerializer<T>>(() => new MySingletonXmlSerializer<T>());
 
        public static MySingletonXmlSerializer<T> Instance { get { return _instance.Value; } }
   
        private MySingletonXmlSerializer() { }
 
        public void Serialize(T _serializableobject, string _filename)
        {
            XmlSerializer serializer = new XmlSerializer(_serializableobject.GetType());
            using (FileStream fs = new FileStream(_filename, FileMode.Create))
            {
                serializer.Serialize(fs, _serializableobject);
            }
        }
 
        public object Deserialize(string _filename, Type _type)
        {
            if (!string.IsNullOrEmpty(_filename) && System.IO.File.Exists(_filename))
            {
                XmlSerializer serializer = new XmlSerializer(_type);
                using (FileStream fs = new FileStream(_filename, FileMode.Open))
                {
                    return serializer.Deserialize(fs);
                }
            }
 
            else
                return null;
        } 
 
    }
Как сделать из
public object Deserialize(string _filename, Type _type)
public T Deserialize(string _filename, Type _type)
?

Решение задачи: «От System.Object к обобщению»

textual
Листинг программы
     public class MySingletonXmlSerializer<T> : ISerializer<T>
        where T : IEnumerable<MyClass>, new()
    {
        private static readonly Lazy<MySingletonXmlSerializer<T>> instance = new Lazy<MySingletonXmlSerializer<T>>(() => new MySingletonXmlSerializer<T>());
 
        public static MySingletonXmlSerializer<T> Instance { get { return instance.Value; } }
   
        private MySingletonXmlSerializer() { }
 
        public void Serialize(T _serializableObject, string _fileName)
        {
            XmlSerializer serializer = new XmlSerializer(_serializableObject.GetType());
            using (FileStream fs = new FileStream(_fileName, FileMode.Create))
            {
                serializer.Serialize(fs, _serializableObject);
            }
        }
 
        public T Deserialize(string _fileName)
        {
            try
            {
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                using (FileStream fs = new FileStream(_fileName, FileMode.Open))
                {
                    return (T)serializer.Deserialize(fs);
                }
            }
            catch(FileNotFoundException)
            {
                return new T();
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы