От 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();
}
}