繁体   English   中英

反序列化XML注释文档C#

[英]Deserializing XML comment documentation C#

我试图反序列化一些C#文档的XML,开始于members在下面的代码片段节点。

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Licsp</name>
    </assembly>
    <members>
        <member name="T:Licsp.Parsing.SExp">
            <summary>
            Intermediary structure used by parser
            </summary>
        </member>
     </members>
</doc>

每个member都应反序列DocItem members集合应反序列化为DocFile

[XmlRoot("members")]
public class DocFile
{
    [XmlArrayItem("member", typeof(DocItem))]
    public List<DocItem> Items = new List<DocItem>();
}

[Serializable()]
public class DocItem
{
    [XmlAttribute("name")]
    public string Name;

    [XmlElement("summary")]
    public string Summary;

    [XmlElement("example")]
    public string Example;

    [XmlElement("remarks")]
    public string Remarks;
}

这是调用代码:

        using (var reader = new XmlTextReader(documentation))
        {
            reader.ReadToDescendant("members");
            var deserializer = new XmlSerializer(typeof(DocFile));
            DocFile helpfile = (DocFile)deserializer.Deserialize(reader.ReadSubtree());
        }

我返回了DocFile对象,但是Items为空。 序列化DocFile对象将产生以下结果:

<?xml version="1.0" encoding="utf-8"?>
<members xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Items>
    <member name="name">
      <summary>summary</summary>
      <example>example</example>
      <remarks>remarks</remarks>
    </member>
  </Items>
</members>

我不确定为什么反序列化失败了。 我究竟做错了什么?

由于members是您的根,并且需要集合中的member子代,因此将[XmlArrayItem]替换为[XmlElement]

XmlElement可以用于单个节点,也可以将许多具有相同名称的节点滚动到集合中。

[XmlRoot("members")]
public class DocFile
{
    [XmlElement("member")]
    public List<DocItem> Items = new List<DocItem>();
}

XmlArrayItemXmlArray结合使用。 例如,如果您以doc作为您的根目录而上一个级别,那将奏效。

暂无
暂无

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

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