C# список в xml

вызов

List<PC> _PCList = new List<PC>();
...add Pc to PCList.. 
WriteXML<List<PC>>(_PCList, "ss.xml");

функции

public static void WriteXML<T>(T o, string filename)
{

    string filePath= Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "Genweb2ADSnopper" + filename;

    XmlDocument xmlDoc = new XmlDocument();
    XPathNavigator nav = xmlDoc.CreateNavigator();
    using (XmlWriter writer = nav.AppendChild())
    {
        XmlSerializer ser = new XmlSerializer(typeof(List<T>), new XmlRootAttribute("TheRootElementName"));
        ser.Serialize(writer, o); // error
    }
    File.WriteAllText(filePath,xmlDoc.InnerXml);

}

внутреннее исключение

не удается привести объект типа 'System.Коллекции.Родовой.Список1[PC]' to type 'System.Collections.Generic.List1[Системы.Коллекции.Родовой.Список ' 1[PC]]'.

Пожалуйста, Помогите

3 ответов


проблема с линией

XmlSerializer ser = new XmlSerializer(typeof(List<T>), ...

код T уже List<PC>, а вы пытаетесь создать typeof(List<T>), что соответствует typeof(List<List<PC>>). Просто сделайте это typeof(T) вместо.


Он должен быть!--3-->

typeof(T) 

вместо

List<T> 

XmlSerializer ser = new XmlSerializer(typeof(T), new XmlRootAttribute("TheRootElementName"));

эта строка в вашем коде вызывает проблему

XmlSerializer ser = new XmlSerializer(typeof(List<T>), 

его создание списка списка, чем не требуется

XmlSerializer ser = new XmlSerializer(typeof(T), 

либо вы делаете выше изменения, либо ниже изменений

есть проблема с вами метод, который вам нужно изменить подпись на

public static void WriteXML<T>(List<T> o, string filename) 

и вызовите метод, как показано ниже

WriteXML<PC>(_PCList, "ss.xml"); 

сделав выше изменение может решить вашу проблему.