繁体   English   中英

反序列化xmlarray的xml属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM