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.List
1[Системы.Коллекции.Родовой.Список ' 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");
сделав выше изменение может решить вашу проблему.