繁体   English   中英

C#List <>到xml

[英]C# List<> to 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]]'。

请帮忙

问题在于线路

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

您的T已经是List<PC> ,并且您正在尝试创建typeof(List<T>) ,它将转换为typeof(List<List<PC>>) 只需将其改为typeof(T)

它应该是

typeof(T) 

代替

List<T> 

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

代码中的这一行导致问题

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

通过执行上述更改可能会解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM