0

我的错误是:无法将“System.Xml.Linq.XDocument”类型的对象转换为类型

我正在尝试执行此代码:

XmlSerializer s1 = new XmlSerializer(typeof(xdoc.toString()));

其中 xdoc 具有此值:

<root>
  <row1>
    <ing>john</ing>
  </row1>
  <row1>
    <ing>some name</ing>
  </row1>
  <row>
    <name>salad</name>
    <ID>8</ID>
  </row>
</root>

我创建了一个像这样的类:

class Print {
    List<row1> row1 = new List<row1>();
    List<row> row = new List<row>();
}

public class row1
{
    public string ing { get; set; }
}

public class row
{
    public string name { get; set; }       
    public string ID { get; set; }
}

但它不起作用。我究竟做错了什么?

4

4 回答 4

2

XmlSerializer构造函数中,您需要传入要序列化或反序列化到的类型,而不是值。如果您尝试反序列化为Print对象,则需要传入typeof(Print).

此外,就目前的代码而言,反序列化将不起作用,因为XmlSerializer该类期望根节点为Print. 要解决此问题,您可以使用属性装饰您的PrintXmlRoot并传入root. 然后你的代码可能会工作。

编辑: 您的代码将不起作用,您的 XML 将需要一个附加元素来表示列表:

<root>
  <ListOfrow1>
    <row1>...</row1>
  </ListOfrow1>
  ...
于 2012-10-03T16:35:43.473 回答
2

我同意 Furqan 的观点,即问题不完整,但 XmlSerializer 的参数应该是 CLR 对象的类型,而不是 XDocument。我认为应该是这样的

XmlSerializer s1 = new XmlSerializer(typeof(Print));
Print = (Print)s1.Deserialize(xdoc);
于 2012-10-03T16:38:27.980 回答
1

当您拥有 XDocument 时,您不需要 XmlSerializer。linq就够了

List<row1> row1 = xDoc.Descendants("row1")
                .Select(x => new row1() { ing = x.Element("ing").Value })
                .ToList();

List<row> row = xDoc.Descendants("row")
                    .Select(x => new row() { 
                        name = x.Element("name").Value,
                        ID = x.Element("ID").Value 
                    })
                    .ToList();
于 2012-10-03T17:02:23.300 回答
0

看起来像是在new XmlSerializer(typeof(xdoc.toString()));尝试写new XmlSerializer(typeof(string));这不太可能是您想要的。您可能想要类似XmlSerializer(typeof(Print)). 示例可以在MSDN-XmlSerializer 文章中找到。

于 2012-10-03T16:33:41.667 回答