【发布时间】:2012-04-14 09:37:55
【问题描述】:
我正在使用的 XML 具有以下结构:
<fixture_statistics>
<home_player_1 id="2306143" teamid="2">
<element_1>Some Data</element_1>
<element_2>Some Data</element_2>
</home_player_1>
<home_player_2 id="2306144" teamid="2">
<element_1>Some Data</element_1>
<element_2>Some Data</element_2>
</home_player_2>
</fixture_statistics>
现在反序列化它的代码通常如下所示:
[XmlRootAttribute("fixture_statistics", Namespace = "", IsNullable = false)]
public class FixtureRoot
{
[XmlElement("home_player_1")]
[XmlElement("home_player_2")]
public List<FixtureStats> fixtures { get; set; }
}
public class FixtureStats
{
public string element_1;
[XMLElement("element_2")]
public string elementTwo;
}
问题是:我希望 FixtureStats 类有一个“位置”属性,该属性对应于它的父元素名称(因此对应于 home_player_1 的 FixtureStat 对象的位置=1)。 这可以通过内置的序列化属性来完成吗?
如果不可能,最干净的解决方法是什么?请记住,每个文档将包含大约 50 个播放器元素,每个包含大约 50 个“子”数据元素。
【问题讨论】:
-
这个 Xml 文档的结构设计得很差。您是否可以更改它以删除后缀?如果不是,那么我可以想到 3 种处理方法: - 通过删除/重新创建后缀(添加额外步骤)在序列化之前/之后转换文档,实现 IXmlSerializable 接口(这很痛苦),使用 Linq to Xml 处理序列化(不会很通用,可以很快变大)
-
同意。 xml 的格式不在我的控制之下,所以如果不能按原样使用,则需要进行转换。
标签: c# xml-serialization xml-parsing linq-to-xml