Используя дженерики с XmlSerializer

При использовании сериализации 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);
    }
}
14
задан Oded 19 April 2010 в 19:23
поделиться

2 ответа

В дополнение к @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);
24
ответ дан 1 December 2019 в 06:53
поделиться

Сделайте свой класс / метод сериализации универсальным:

public T LoadData<T>()
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
    using (TextReader reader = new StreamReader(settingsFileName))
    {
        return (T)xmlSerializer.Deserialize(reader);
    }
}
12
ответ дан 1 December 2019 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: