用c#处理XML中根节点中的根节点
本文关键字:根节点 XML 处理 | 更新日期: 2023-09-27 18:05:30
很抱歉,我不知道什么是合适的措辞。
我一直在使用这段代码来解析一些XML:
[Serializable()]
public class Report
{
[XmlElement("AttachedFiles")]
public AttachedFiles attachedFiles;
public Report()
{
attachedFiles = null;
}
}
[Serializable()]
[XmlRoot("nodes")]
public class ReportList
{
[XmlElement("node", typeof(Report))]
public Report[] reportList;
}
[Serializable()]
[XmlRoot("AttachedFiles")]
public class AttachedFiles
{
[XmlElement("AttachedFile")]
public List<string> attachedFiles;
}
XML看起来像这样:
<nodes>
<node>
<AttachedFiles>
<AttachedFile>File1</AttachedFile>
<AttachedFile>File2</AttachedFile>
</AttachedFiles>
</node>
</nodes>
我遇到的问题是,这最终导致我不得不调用Report.attachedFiles.attachedFiles
来获取列表。是否有一种方法让我只打电话给Report.attachedFiles
并获得列表?我知道这只是个小问题,但它确实困扰了不少人。
编辑
这是@xDaevax帮助后的代码。
[Serializable()]
public class Report
{
[XmlArray(ElementName = "AttachedFiles"), XmlArrayItem(ElementName = "AttachedFile")]
public List<string> AttachedFiles;
public Report()
{
attachedFiles = null;
}
}
[Serializable()]
[XmlRoot("nodes")]
public class ReportList
{
[XmlElement("node", typeof(Report))]
public Report[] reportList;
}
谢谢你的帮助!
这是我想到的(虽然我没有你的JiraReport类在手)
[Serializable()]
public class Report {
[XmlIgnore()]
private AttachedFiles _attachedFiles;
public Report() {
attachedFiles = null;
} // end constructor
[XmlArray(ElementName = "AttachedFiles"), XmlArrayItem(ElementName = "AttachedFile")]
public AttachedFiles Files {
get { return _attachedFiles; }
set { _attachedFiles = value; }
} // end property Files
} // end class Report
[Serializable()]
[XmlRoot("ReportList")]
public class ReportList {
[XmlIgnore()]
private Report[] _reports;
public ReportList() {
_reports = null;
} // end constructor
[XmlArray(ElementName = "nodes"), XmlArrayItem(ElementName = "node")]
public Report[] Reports {
get { return _reports; }
set { _reports = value; }
} // end property Reports
} // end class ReportList
[Serializable()]
public class AttachedFiles : List<string> {
} // end class AttachedFiles
在集合属性上使用XmlArray和ArrayItem简化了属性的使用,使代码更容易阅读。此外,因为AttachedFiles类继承自字符串列表,它从对象图中删除了一个深度级别,因此调用不再是冗余的。您还可以在ReportList类上添加一个函数,该函数循环并返回所有报告的所有附加文件(函数不会被XmlSerializer序列化)。
编辑:这里是一些MSDN文档,解释了功能的用法:
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlarrayitemattribute (v = vs.100) . aspx另外,请参阅BlackWasp的这篇文章,该文章对涉及数组的XML序列化进行了很好的演练。http://www.blackwasp.co.uk/xmlarrays.aspx