2012-09-26 75 views
7

調用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) + "\\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); 

} 

內部異常

無法轉換類型的對象「System.Collections.Generic.List 1[PC]' to type 'System.Collections.Generic.List 1 System.Collections.Generic.List`1 [PC]」。

請幫助

+0

不要忘記upvote並將其標記爲接受,如果它適合你 –

回答

6

的問題是與線

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

這一行代碼導致問題

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

通過上述變化做可能會解決您的問題。