我正在使用的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类具有一个'position'属性,该属性与它的父元素名称相对应(因此与home_player_1相对应的FixtureStat对象将具有position = 1)。 这可以通过内置的序列化atrributes完成吗?
如果不可能,那么最干净的解决方法是什么?请记住,每个文档将包含大约50个玩家元素,每个元素包含大约50个“子”数据元素。
答案 0 :(得分:0)
这会有用吗?
XDocument xDoc = XDocument.Load(.....);
var result =
xDoc.Descendants("element_1")
.Select(n => new { Parent = n.Parent.Attribute("id").Value,Value = n.Value, })
.ToArray();
答案 1 :(得分:0)
var xml = XElement.Load("XMLFile1.xml");
int startIndex = 12;
List<FixtureStats> fixtures =
(from playerNode in xml.Elements()
select new FixtureStats
{
position = Int32.Parse(playerNode.Name.LocalName.Substring(startIndex)),
element_1 = playerNode.Element("element_1").Value,
element_2 = playerNode.Element("element_2").Value
}).ToList();
您必须在父元素名称中找到整数部分所在的位置。在“home_player_1”的情况下它是12,但你可以在不同的情况下找到它的标准字符串方法。