我必须按如下方式反序列化一个XML对象:
<programs>
<item0></item0>
<item1></item1>
...
<item200></item200>
</programs>
事实上,每个<item></item>
的结构是相同的,所以我想在同一个c#类中重新组合所有这些项目,看起来像这样:
public class Item{
public object prop1{get; set; }
public object prop2{get; set; }
public object prop3{get; set; }
}
代替这个,现在我在c#中使用这个结构:
[XmlRoot(ElementName="programs")]
public class Programs {
[XmlElement(ElementName="item0")]
public Item0 Item0 { get; set; }
[XmlElement(ElementName="item1")]
public Item1 Item1 { get; set; }
[XmlElement(ElementName="item2")]
public Item2 Item2 { get; set; }
...
[XmlElement(ElementName="item200")]
public Item200 Item200 { get; set; }
}
如果有人能帮助我,我将非常感激!
使用LINQ可以将XML转换为所需的输出
假设给定的xml是这种格式
<programs>
<item0 attribute1="0">
<property1>test1</property1>
</item0>
<item1 attribute1="1">
<property1>test2</property1>
</item1>
<item200 attribute1="2">
<property1>test3</property1>
</item200>
</programs>
有一个带有已定义元素的Item类
public class Items
{
public string id { get; set; }
public string property1 { get; set; }
public string attribute1 { get; set; }
}
使用LINQ可以过滤所有项目并创建所需的对象
var xdoc = XDocument.Parse(strFile);
var result = xdoc.Descendants().Where(x=>x.Name.LocalName.StartsWith("item")).Select(y=> new Items() {
id = y.Name.LocalName.Replace("item",""),
property1 = y.Element("property1").Value,
attribute1 = y.Attribute("attribute1").Value
});