При использовании сериализации XML в C# я использую код как это:
public MyObject LoadData()
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject));
using (TextReader reader = new StreamReader(settingsFileName))
{
return (MyObject)xmlSerializer.Deserialize(reader);
}
}
(и подобный код для десериализации).
Это требует кастинга и не действительно хорошо. Существует ли путь, непосредственно в Платформе.NET, для использования дженериков с сериализацией? То есть записать что-то как:
public MyObject LoadData()
{
// Generics here.
XmlSerializer<MyObject> xmlSerializer = new XmlSerializer();
using (TextReader reader = new StreamReader(settingsFileName))
{
// No casts nevermore.
return xmlSerializer.Deserialize(reader);
}
}
В дополнение к @Oded вы можете сделать метод универсальным , а также:
public T ConvertXml<T>(string xml)
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(new StringReader(xml));
}
Таким образом, вам не нужно делать весь общий класс, и вы можете использовать его следующим образом:
var result = ConvertXml<MyObject>(source);
Сделайте свой класс / метод сериализации универсальным:
public T LoadData<T>()
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
using (TextReader reader = new StreamReader(settingsFileName))
{
return (T)xmlSerializer.Deserialize(reader);
}
}