对不起这个可怕的头衔,我不确定正确的措辞是什么。
我一直在用这段代码来解析一些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;
}
感谢您的帮助!
答案 0 :(得分:1)
这是我想出的(虽然我没有你的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