【发布时间】:2016-04-02 23:25:46
【问题描述】:
我正在编写一个 C# WinForm 应用程序,它应该读取一个预先存在的 XML 文件。
我需要解析XML 文件并建立一个数据结构来反映XML 文件内容。
我在XML 序列化方面有一些经验,因此我坚持使用.NET XML.Serialization 功能。
我陷入了一个奇怪的XML 结构中,我无法在类中匹配(通过属性、元素等):
<sheet number="1" name="/" tstamps="/">
<title_block>
<title>ECC Push-Pull</title>
<company/>
<rev>0.1</rev>
<date>Sat 21 Mar 2015</date>
<source>ecc83-pp.sch</source>
<comment number="1" value=""/>
<comment number="2" value=""/>
<comment number="3" value=""/>
<comment number="4" value=""/>
</title_block>
</sheet>
其中“奇怪”的部分是 cmets 列表。由于使用 XmlArray 指令对元素列表/数组进行序列化,我习惯于查找此类“重复”项目。无论如何,使用这种方法会引入一个环绕标签来包含项目列表。在这种情况下,我如何“反映”这种结构? 这是我应该使用的代码(没有“缺失”的 cmets):
[XmlRoot("sheet")]
public class Sheet
{
[XmlAttribute("number")]
public int Number { get; }
[XmlAttribute("name")]
public string Name { get; set; }
[XmlAttribute("tstamps")]
public UInt32 TimeStamps { get; set; }
[XmlElement]
public SheetTitle Title { get; set; }
public Sheet()
{
Title = new SheetTitle();
}
}
[XmlRoot("title_block")]
public class SheetTitle
{
[XmlElement("title")]
public string Title { get; set; }
[XmlElement("company")]
public string Company { get; set; }
[XmlElement("rev")]
public string Revision { get; set; }
[XmlElement("date")]
public DateTime Date { get; set; }
[XmlElement("source")]
public string Source { get; set; }
public SheetTitle()
{
Date = DateTime.Now;
}
}
[XmlRoot("comment")]
public class Comment
{
[XmlAttribute("number")]
public int Number { get; set; }
[XmlAttribute("value")]
public string Value { get; set; }
}
我还有另一个问题。反映这种结构的最佳类层次结构是: a) 以与 xml 元素相同的方式嵌套类 b) 将所有类保持在同一级别(没有层次结构)? 有副作用需要考虑吗?
【问题讨论】:
-
我们希望您的问题已经解决。如果没有,也许考虑更新您的问题....meta.stackexchange.com/questions/5234/…
-
出去度假了,我马上去看看
标签: c# xml xml-serialization