【问题标题】:C# List<> to xmlC# 列表<> 到 xml
【发布时间】:2012-09-26 07:45:35
【问题描述】:

打电话

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.List1[PC]' to type 'System.Collections.Generic.List1[System.Collections.Generic.List`1[PC]]”的对象。

请帮忙

【问题讨论】:

  • 如果对你有用,别忘了点赞并将其标记为已接受

标签: c# xml xmlserializer


【解决方案1】:

问题出在线路上

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

您的T 已经是List&lt;PC&gt;,并且您正在尝试创建typeof(List&lt;T&gt;),它将转换为typeof(List&lt;List&lt;PC&gt;&gt;)。只需改为typeof(T)

【讨论】:

    【解决方案2】:

    应该是

    typeof(T) 
    

    而不是

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

    【讨论】:

      【解决方案3】:

      代码中的这一行导致问题

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

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

      【讨论】:

        猜你喜欢
        • 2019-03-05
        • 2013-05-02
        • 2021-08-29
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 2016-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多