2012-09-26 14 views
7

WywołanieC# List <> XML

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

Function

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

    string filePath= Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Genweb2\\ADSnopper\\" + 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); 

} 

wewnętrzna wyjątku

Nie można rzutować obiektu typu „System.Collections.Generic.List 1[PC]' to type 'System.Collections.Generic.List 1 [ System.Collections.Generic.List`1 [PC]] ".

proszę o pomoc

+0

Nie zapomnij o awansie i oznacz go jako zaakceptowany, jeśli działa on dla Ciebie –

Odpowiedz

6

Problem jest z linii

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

Twój T jest już List<PC> i próbujesz utworzyć typeof(List<T>), który zostanie przetłumaczony na typeof(List<List<PC>>). Po prostu zmień go na typeof(T).

3

Powinno być

typeof(T) 

zamiast

List<T> 

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

ta linia w kodzie powodując problemem

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

jej tworzenia listy listy niż nie jest potrzebna

XmlSerializer ser = new XmlSerializer(typeof(T), 

albo robisz nad zmianą czy poniżej zmienia

There jest problem z tobą, musisz zmienić podpis na

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

i wywołanie metody jak poniżej

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

Robiąc powyżej zmiany mogą rozwiązać swój problem.