2012-09-26 35 views
7

CallingC# List <> để xml

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

Chức năng

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

} 

ngoại lệ nội

Không thể cast đối tượng của loại 'System.Collections.Generic.List 1[PC]' to type 'System.Collections.Generic.List 1 [ System.Collections.Generic.List`1 [PC]] '.

Xin vui lòng giúp

+0

Đừng quên upvote và đánh dấu nó như được chấp nhận nếu nó làm việc cho bạn –

Trả lời

6

Vấn đề là với dòng

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

T của bạn đã là List<PC> và bạn đang cố gắng tạo typeof(List<T>), sẽ dịch thành typeof(List<List<PC>>). Đơn giản chỉ cần làm cho nó typeof(T) thay thế.

3

Nó phải là

typeof(T) 

thay vì

List<T> 

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

dòng này trong mã của bạn gây ra vấn đề

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

nó tạo danh sách của danh sách hơn là không cần thiết

XmlSerializer ser = new XmlSerializer(typeof(T), 

hoặc là bạn làm ở trên thay đổi hoặc làm dưới đây thay đổi

Có là vấn đề với phương pháp bạn cần phải thay đổi chữ ký thành

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

và gọi phương thức như sau

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

Bằng cách làm như trên thay đổi có thể giải quyết vấn đề của bạn.

Các vấn đề liên quan