XML反序列化而不指定XmlRootAttribute

Mil*_*ara 2 c# xml xml-serialization xml-deserialization

这是我的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>
Run Code Online (Sandbox Code Playgroud)

从代码背后:

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));
            }
Run Code Online (Sandbox Code Playgroud)

这是我的班级定义:

[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; }  
    }
Run Code Online (Sandbox Code Playgroud)

但是当我尝试反序列化时.它显示我的错误:{"有多个根元素."}

是否有任何解决方案或替代指定XmlRootAttribute?

感谢提前,米兰门德帕拉

das*_*ash 5

我认为你的问题在于这一行:

StringReader re = new StringReader(ele.InnerXml);
Run Code Online (Sandbox Code Playgroud)

将其更改为:

StringReader re = new StringReader(ele.OuterXml);
Run Code Online (Sandbox Code Playgroud)

原因是InnerXml属性将返回所有子节点,但不返回父节点.OuterXml也将包含您的父人节点.

即InnerXml没有根元素(好吧,它有很多!):

<id>ohKiUAZWz2</id>
<first-name>?????al</first-name>
<last-name>§|-|ä|-|»?«</last-name>
<headline>--</headline>
Run Code Online (Sandbox Code Playgroud)

OuterXml如预期:

<person>
    <id>ohKiUAZWz2</id>
    <first-name>?????al</first-name>
    <last-name>§|-|ä|-|»?«</last-name>
    <headline>--</headline>
</person> 
Run Code Online (Sandbox Code Playgroud)

也没有必要使用您正在使用的XmlSerializer构造函数.尝试:

XmlSerializer mySerializer = new XmlSerializer(typeof(LinkWall));
Run Code Online (Sandbox Code Playgroud)

代替.