2012-09-26 17 views
7

CallingC# List <> di xml

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

Funzione

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); 

} 

eccezione interna

Impossibile eseguire il cast oggetto di tipo 'System.Collections.Generic.List 1[PC]' to type 'System.Collections.Generic.List 1 [ System.Collections.Generic.List`1 [PC]]'.

si prega di aiuto

+0

Non dimenticare di revocare la votazione e contrassegnarlo come accettato se funziona per te –

risposta

6

Il problema è con la linea

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

Il tuo T è già List<PC> e stai cercando di creare typeof(List<T>), che verrà tradotto in typeof(List<List<PC>>). Semplicemente rendilo invece typeof(T).

3

Va

typeof(T) 

invece di

List<T> 

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

questa riga nel codice che causa problema

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

sua creazione lista di lista di Non è necessario

XmlSerializer ser = new XmlSerializer(typeof(T), 

o si fa sopra il cambiamento o fare sotto cambia

Ci è un problema con il metodo che è necessario modificare la firma in

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

e chiamata al metodo come di seguito

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

Facendo sopra cambiamento potrebbe risolvere il problema.

Problemi correlati