<?xml version="1.0" encoding="utf-8"?>
<root>
  <id>111</id>
  <name>aa</name>
   <item site="www.163.com" name="网易" />
   <item site="www.263.net" name="263" />
</root> [XmlRoot("root")]
    public class siteConfig 
    {
        private string _id;
        public string id 
        {
            get 
            {
                return _id;
            }
            set 
            {
                _id = value;
            }
        }
        private string _name;
        public string name 
        {
            get 
            {
                return _name;
            }
            set 
            {
                _name = value;
            }
        }
        在xml的结构不可能更改的情况,请问要把item节点弄成item[]这样的数组,应该怎么样写?
    }

解决方案 »

  1.   

    You might use custom xml serialization - get your class to implement IXmlSerializable:
    [XmlRoot("root")]
    public class siteConfig : IXmlSerializable                        //<---

        private string _id; 
        public string id 
        {
            get { return _id; }
            set { _id = value; }
        } 
        private string _name; 
        public string name 
        {
            get { return _name; }
            set { _name = value; }
        }    private Site[] items;
        public Site[] Items {
            get { return this.items; }
            set { this.items = value; } 
        }    public class Site
        {
            public string site;
            public string name;
            public Site(string site, string name)
            {
                this.site = site;
                this.name = name;
            }
        }    #region IXmlSerializable Members    System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()
        {
            return null;
        }    void IXmlSerializable.ReadXml(System.Xml.XmlReader reader)    //<---
        {
            List<Site> sites = new List<Site>();        while (reader.Read())
            {
                if (reader.IsStartElement())
                {
                    switch (reader.Name)
                    {
                        case "id":
                            this.id = reader.ReadString();
                            break;
                        case "name":
                            this.name = reader.ReadString();
                            break;
                        case "item":
                            string site = reader["site"];
                            string name = reader["name"];
                            sites.Add(new Site(site, name));
                            break;
                    }
                }
            }
            this.Items = sites.ToArray();
        }    void IXmlSerializable.WriteXml(System.Xml.XmlWriter writer)    //<---
        {
            writer.WriteElementString("id", this.id);
            writer.WriteElementString("name", this.name);
            if (this.Items != null)
            {
                foreach (Site site in this.Items)
                {
                    writer.WriteStartElement("item");
                    writer.WriteAttributeString("site", site.site);
                    writer.WriteAttributeString("name", site.name);
                    writer.WriteEndElement();
                }
            }
        }    #endregion
    }
      

  2.   

    先谢谢gomoku了,代码可以运行,不过再请教一下,有没有别的办法,一开始我以为应该是用类似[XmlArray] [XmlAnyElement(..)]之类来控制的,发现你那样的代码是可以行得通,不过,如果我的Item比较复杂,
    它里面嵌套多层子节点,用ReadXml和WriteXml来弄,就很不好弄了,除了上面那种,有没有别的方法?
      

  3.   

    http://topic.csdn.net/u/20081215/12/19623879-e3b4-4d0e-a6d4-5125b4c2bced.html刚刚在这个帖子里解答了你的问题,去看看吧!!!