using System.Xml.Serialization;
using System.Collections;namespace CommonLibrary.Email {      
   
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.sunny.com")]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.sunny.com", IsNullable = false)]
    public class MailAccounts {        private MailAccount[] accountField;        [System.Xml.Serialization.XmlElementAttribute("Account")]
        public MailAccount[] Account
        {
            get
            {
                return this.accountField;
            }
            set
            {
                this.accountField = value;
            }
        }        //[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = false)]
        private MailCollections accounts = new MailCollections();        [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = true)]
        public MailCollections Accounts
        {
            get { return this.accounts; }
            set { this.accounts = value; }
        }
       
    }   
    public class MailCollections : CollectionBase
    {
        public MailAccount this[int inx]
        {
            get
            {
                return ((MailAccount)(base.InnerList[inx]));
            }
            set
            {
                base.InnerList[inx] = value;
            }
        }        public MailAccount Find(string userName)
        {
            foreach (MailAccount acc in this)
            {
                if (string.Compare(acc.user, userName, true) == 0)
                {
                    return acc;
                }
            }            return null;
        }        public void AddAccount(MailAccount account)
        {
            base.InnerList.Add(account);
        }        public void RemoveAccount(string userName)
        {
            base.InnerList.Remove(this.Find(userName));
        }
    }    
   
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.sunny.com")]
    public class MailAccount :System.ICloneable{
        
        private string userField;
        
        private string passwordField;
        
        private string popServerField;
        
        private string popPortField;        object System.ICloneable.Clone()
        {
            return this.Clone();
        }        public virtual MailAccount Clone()
        {
            MailAccount m = this.MemberwiseClone() as MailAccount;
            return m;
        }
        
        public string user {
            get {
                return this.userField;
            }
            set {
                this.userField = value;
            }
        }
        
        public string password {
            get {
                return this.passwordField;
            }
            set {
                this.passwordField = value;
            }
        }
        
        public string popServer {
            get {
                return this.popServerField;
            }
            set {
                this.popServerField = value;
            }
        }
        
        public string popPort {
            get {
                return this.popPortField;
            }
            set {
                this.popPortField = value;
            }
        }
    }
}
以上是序列化用的class
在MailAccounts类里如果去掉
[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = true)]
        public MailCollections Accounts
        {
            get { return this.accounts; }
            set { this.accounts = value; }
        }
然后
XmlSerializer machineSerializer = new XmlSerializer(typeof(CommonLibrary.Email.MailAccounts));
正确
如果不去掉
就会throw异常
There was an error reflecting type 'CommonLibrary.Email.MailAccounts'请教那个MailCollection什么地方有问题
或者说在public MailCollections Accounts 这上面加什么属性

解决方案 »

  1.   


    //[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = false)]
    private MailCollections accounts = new MailCollections();
    改成
    //[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = true)]
    private MailCollections accounts = new MailCollections();

    //[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = false)]
    public MailCollections accounts = new MailCollections();
    试试
      

  2.   

    解决问题
    public void AddAccount(MailAccount account)
            {
                base.InnerList.Add(account);
            }这个方法一定要叫Add不然就是要报错的