![](/img/trans.png)
[英]Deserialize XML to List<string> failing with XmlArray, XmlElement, and XmlArrayItem
[英]deserialize xml attribute of xmlarray
我知道你不能将属性添加到XmlArray中,我认为这是非常不方便的。 我知道我可以为Phone创建一个单独的类,但是,Phone属于Access。 我还有大约30个节点正在访问。 如何反序列化属性hasTextField?
<Access>
<Phone hasTextField="true">
<Item description="Skype" />
<Item description="IP Phone" />
</Phone>
<Computer>
<Item description="PC" />
<Item description="Laptop" />
</Computer>
</Access>
[XmlRoot("Access")]
public class Access
{
public Access(){}
[XmlArray("Phone")]
[XmlArrayItem("Item")]
public AccessItem[] ItemList;
[XmlArray("Computer")]
[XmlArrayItem("Item")]
public AccessItem[] ItemList;
}
您可以使用XmlElement
替换XmlArray
。
请参阅: 如何将属性添加到标有XmlArrayAttribute的集合中?
[XmlType("Access")]
public class Access
{
[XmlElement("Phone")]
public AccessItem Phone { get; set; }
[XmlElement("Computer")]
public AccessItem Computer { get; set; }
}
public class AccessItem
{
public AccessItem()
{
Items = new List<Item>();
}
[XmlAttribute("hasTextField")]
public bool HasTextField { get; set; }
[XmlElement("Item")]
public List<Item> Items { get; set; }
}
[XmlType("Item")]
public class Item
{
[XmlAttribute("description")]
public string Description { get; set; }
}
码:
var data = @"<Access>
<Phone hasTextField=""true"">
<Item description=""Skype"" />
<Item description=""IP Phone"" />
</Phone>
<Computer>
<Item description=""PC"" />
<Item description=""Laptop"" />
</Computer>
</Access>";
var serializer = new XmlSerializer(typeof(Access));
Access access;
using(var stream = new StringReader(data))
using(var reader = XmlReader.Create(stream))
{
access = (Access)serializer.Deserialize(reader);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.