2012-09-26 30 views
7

CallingLista C# <> a XML

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

Función

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

} 

excepción interna

No se puede convertir objeto de tipo 'System.Collections.Generic.List 1[PC]' to type 'System.Collections.Generic.List 1 [ System.Collections.Generic.List`1 [PC]] '.

por favor ayuda

+0

No te olvides de votar y marcar como aceptado si te funciona –

Respuesta

6

el problema está en la línea

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

Su T ya es List<PC>, y está tratando de crear typeof(List<T>), que se traducirá a typeof(List<List<PC>>). Simplemente hazlo typeof(T) en su lugar.

3

Cabe

typeof(T) 

en lugar de

List<T> 

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

esta línea en su código que está causando un problema

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

su lista de creación de listas que no se necesita

XmlSerializer ser = new XmlSerializer(typeof(T), 

o lo haces por encima de cambiar o hacer a continuación cambia

Hay es un problema con el método que necesita para cambiar la firma a

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

y llamada al método como a continuación

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

Haciendo anterior cambio podría resolver su problema.

Cuestiones relacionadas