public void WriteXml(XmlWriter writer)
        {
            XmlDocument xmlTemplate = XmlLoader.GetXmlTemplate(base.GetType(), 0);
            XmlNode     xml         = xmlTemplate.SelectSingleNode("MailMessage");

            XmlLoader.SetNode(ref xml, "Body", base.Body);
            XmlLoader.SetNode(ref xml, "Subject", base.Subject);
            XmlLoader.SetNode <MailAddressXml>(ref xml, "Bcc", "MailAddress", MailAddressXml.CopyCollection(base.Bcc));
            XmlLoader.SetNode <MailAddressXml>(ref xml, "Cc", "MailAddress", MailAddressXml.CopyCollection(base.CC));
            XmlLoader.SetNode <MailAddressXml>(ref xml, "To", "MailAddress", MailAddressXml.CopyCollection(base.To));
            XmlLoader.SetNode(ref xml, "From/MailAddress", (IXmlSerializable) new MailAddressXml(base.From));
            XmlLoader.SetNode(ref xml, "Sender/MailAddress", (IXmlSerializable) new MailAddressXml(base.Sender));
            XmlLoader.SetNode(ref xml, "ReplyTo/MailAddress", (IXmlSerializable) new MailAddressXml(base.ReplyTo));
            XmlLoader.SetNode(ref xml, "Priority", base.Priority);
            XmlLoader.SetNode(ref xml, "IsBodyHtml", base.IsBodyHtml);
            XmlLoader.SetNode(ref xml, "Headers", base.Headers);
            XmlLoader.SetNode(ref xml, "DeliveryNotificationOptions", base.DeliveryNotificationOptions);
            if (base.BodyEncoding != null)
            {
                XmlLoader.SetNode(ref xml, "BodyEncoding", base.BodyEncoding.CodePage);
            }
            if (base.SubjectEncoding != null)
            {
                XmlLoader.SetNode(ref xml, "SubjectEncoding", base.SubjectEncoding.CodePage);
            }
            SetNode(ref xml, "Attachments", base.Attachments);
            XmlLoader.WriteInnerXml(xmlTemplate, writer);
        }
        public void ReadXml(XmlReader reader)
        {
            string str;
            object obj;
            int    num;
            bool   flag;
            NameValueCollection          values;
            IList <Attachment>           attachment;
            ICollection <MailAddressXml> address;
            XmlDocument doc = new XmlDocument();

            doc.Load(reader);
            XmlNode xml = doc.SelectSingleNode("MailMessage");

            if (XmlLoader.GetStringValue(xml, "Body", out str))
            {
                base.Body = str;
            }
            if (XmlLoader.GetStringValue(xml, "Subject", out str))
            {
                base.Subject = str;
            }
            if (XmlLoader.GetCollectionValue <MailAddressXml>(xml, "Bcc/*", new MailAddressXml(), out address))
            {
                MailAddressXml.CopyCollection(address, base.Bcc);
            }
            if (XmlLoader.GetCollectionValue <MailAddressXml>(xml, "Cc/MailAddress", new MailAddressXml(), out address))
            {
                MailAddressXml.CopyCollection(address, base.CC);
            }
            if (XmlLoader.GetCollectionValue <MailAddressXml>(xml, "To/MailAddress", new MailAddressXml(), out address))
            {
                MailAddressXml.CopyCollection(address, base.To);
            }
            if (XmlLoader.GetSerializedObject(xml, "From/MailAddress", new MailAddressXml(), out obj))
            {
                base.From = ((MailAddressXml)obj).MailAddress;
            }
            if (XmlLoader.GetSerializedObject(xml, "ReplyTo/MailAddress", new MailAddressXml(), out obj))
            {
                base.ReplyTo = ((MailAddressXml)obj).MailAddress;
            }
            if (XmlLoader.GetSerializedObject(xml, "Sender/MailAddress", new MailAddressXml(), out obj))
            {
                base.Sender = ((MailAddressXml)obj).MailAddress;
            }
            if (XmlLoader.GetEnumValue(xml, "Priority", typeof(MailPriority), out obj))
            {
                base.Priority = (MailPriority)obj;
            }
            if (XmlLoader.GetBoolValue(xml, "IsBodyHtml", out flag))
            {
                base.IsBodyHtml = flag;
            }
            if (XmlLoader.GetCollectionValue(xml, "Headers", out values))
            {
                TypeHelper.CopyCollection(values, base.Headers);
            }
            if (XmlLoader.GetEnumValue(xml, "DeliveryNotificationOptions", typeof(DeliveryNotificationOptions), out obj))
            {
                base.DeliveryNotificationOptions = (DeliveryNotificationOptions)obj;
            }
            if (XmlLoader.GetIntValue(xml, "BodyEncoding", out num))
            {
                base.BodyEncoding = Encoding.GetEncoding(num);
            }
            if (XmlLoader.GetIntValue(xml, "SubjectEncoding", out num))
            {
                base.SubjectEncoding = Encoding.GetEncoding(num);
            }
            if (GetCollectionValue(xml, "Attachments/Attachment", out attachment))
            {
                TypeHelper.CopyCollection <Attachment>(attachment, base.Attachments);
            }
        }