这是我的 xml:
<connections total="2" >
<person>
<id>ohKiUAZWz2</id>
<first-name>ミ★нιяαℓ</first-name>
<last-name>§|-|ä|-|»♥«</last-name>
<headline>--</headline>
</person>
<person>
<id>LmgYe-Nl2a</id>
<first-name>kunal</first-name>
<last-name>b</last-name>
<headline>Student at MscIT,Surat</headline>
</person>
</connection>
来自后面的代码:
List<LinkWall> LinkWallList = new List<LinkWall>();
XmlNodeList xmlnode = doc.GetElementsByTagName("person");
foreach (XmlElement ele in xmlnode)
{
XmlRootAttribute xr = new XmlRootAttribute("person");
XmlSerializer mySerializer = new XmlSerializer(typeof(LinkWall),xr);
StringReader re = new StringReader(ele.InnerXml);
LinkWallList.Add((LinkWall)mySerializer.Deserialize(re));
}
这是我的类定义:
[XmlRoot("person")]
public class LinkWall
{
public LinkWall()
{ }
[XmlElement(ElementName = "id")]
public string id { get; set; }
[XmlElement(ElementName = "first-name")]
public string firstName { get; set; }
[XmlElement(ElementName = "last-name")]
public string lastName { get; set; }
[XmlElement(ElementName = "headline", IsNullable=true)]
public string headline { get; set; }
}
但是当我尝试反序列化时。它向我显示如下错误:{“有多个根元素。”}
指定 XmlRootAttribute 是否有任何解决方案或替代方案?
提前致谢,Milan Mendpara
最佳答案
我认为您的问题出在这一行:
StringReader re = new StringReader(ele.InnerXml);
将其更改为:
StringReader re = new StringReader(ele.OuterXml);
原因是 InnerXml 属性将返回所有子节点而不是父节点。 OuterXml 也将包含您的父节点。
即InnerXml 没有根元素(嗯,它有很多!):
<id>ohKiUAZWz2</id>
<first-name>?????al</first-name>
<last-name>§|-|ä|-|»?«</last-name>
<headline>--</headline>
OuterXml 符合预期:
<person>
<id>ohKiUAZWz2</id>
<first-name>?????al</first-name>
<last-name>§|-|ä|-|»?«</last-name>
<headline>--</headline>
</person>
也没有真正需要使用您正在使用的 XmlSerializer 构造函数。尝试:
XmlSerializer mySerializer = new XmlSerializer(typeof(LinkWall));
相反。
关于c# - 不指定 XmlRootAttribute 的 XML 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9194331/