XmlSerializer的序列化就是把一个对象的public属性(有Get和Set)和public字段保存到一个xml文件,反序列化就是从一个xml文件得到一个特定的类的实例对象。
Classifieds的程序里面的一些设置就是用序列化技术保存在xml文件里面的。这个类就是 SiteSettings。
using System;   
using System.Data;    
using System.Configuration;    
using System.Web;    
using System.Web.Security;    
using System.Web.UI;    
using System.Web.UI.WebControls;    
using System.IO;    
using System.Text;    
using System.Xml.Serialization; 
using AspNet.StarterKits.Classifieds.Web;
namespace AspNet.StarterKits.Classifieds.BusinessLogicLayer   
{    
    /// <summary>    
    /// Contains the implementation for the site settings.    
    /// </summary>    
    public class SiteSettings    
    { 
private const string XmlConfigFile = "~/App_Data/site-config.xml";
        private int _maxPhotosPerAd;   
        private bool _storePhotosInDatabase;    
        private string _serverPhotoUploadDirectory; 
        private bool _adApprovalRequired;   
        private bool _allowUsersToEditAds;    
        private bool _allowUsersToDeleteAdsInDB; 
        private int _maxAdRunningDays;   
        private AdminNotificationSetting _adminNotification;    
        private string _siteName;    
        private string _siteEmail; 
        public bool AllowImageUploads   
        {    
            get    
            {    
                return (_maxPhotosPerAd > 0);    
            } 
        }   
        public int MaxPhotosPerAd    
        {    
            get    
            {    
                return _maxPhotosPerAd;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _maxPhotosPerAd = value;    
                }    
            }    
        } 
        public bool StorePhotosInDatabase   
        {    
            get    
            {    
                return _storePhotosInDatabase;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _storePhotosInDatabase = value;    
                }    
            } 
}
        public string ServerPhotoUploadDirectory   
        {    
            get    
            {    
                return _serverPhotoUploadDirectory;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _serverPhotoUploadDirectory = value;    
                }    
            } 
}
        public bool AdActivationRequired   
        {    
            get    
            {    
                return _adApprovalRequired;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _adApprovalRequired = value;    
                }    
            } 
        }   
        public bool AllowUsersToEditAds    
        {    
            get    
            {    
                return _allowUsersToEditAds;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _allowUsersToEditAds = value;    
                }    
            }    
        }    
        public bool AllowUsersToDeleteAdsInDB    
        {    
            get    
            {    
                return _allowUsersToDeleteAdsInDB;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _allowUsersToDeleteAdsInDB = value;    
                }    
            }    
        }    
        public int MaxAdRunningDays    
        {    
            get    
            {    
                return _maxAdRunningDays;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _maxAdRunningDays = value;    
                }    
            } 
}
        [System.ComponentModel.TypeConverter(typeof(System.ComponentModel.EnumConverter))]   
        public AdminNotificationSetting AdminNotification    
        {    
            get    
            {    
                return _adminNotification;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _adminNotification = value;    
                }    
            } 
}
        public string SiteName   
        {    
            get    
            {    
                return _siteName;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _siteName = value;    
                }    
            }    
        } 
        public string SiteEmailAddress   
        {    
            get    
            {    
                return _siteEmail;    
            }    
            set    
            {    
                lock (this)    
                {    
                    _siteEmail = value;    
                }    
            }    
        } 
        public string SiteEmailFromField   
        {    
            get    
            {    
                return String.Format("{0} <{1}>", _siteName, _siteEmail);    
            }    
        } 
        public static SiteSettings LoadFromConfiguration()   
        {    
            SiteSettings s = LoadFromXml(); 
            if (s == null)   
            {    
                s = new SiteSettings();    
                s.MaxPhotosPerAd = 5;    
                s.StorePhotosInDatabase = true;    
                s.ServerPhotoUploadDirectory = "Upload";    
                s.AdActivationRequired = false;    
                s.AllowUsersToEditAds = true;    
                s.AllowUsersToDeleteAdsInDB = true;    
                s.MaxAdRunningDays = 21;    
                s.AdminNotification = AdminNotificationSetting.None;    
                s.SiteName = "ASP.NET Classifieds";    
                s.SiteEmailAddress = "classifieds@yoursite.com";    
                SaveToXml(s);    
            }    
            return s;    
        } 
        public static SiteSettings GetSharedSettings()   
        {    
            return ClassifiedsHttpApplication.ClassifiedsApplicationSettings;    
        } 
        public static bool UpdateSettings(SiteSettings newSettings)   
        {    
            // write settings to code or db 
            // update Application-wide settings, only over-writing settings that users should edit   
            lock (ClassifiedsHttpApplication.ClassifiedsApplicationSettings)    
            {    
                // Ads must be activated before appearing on the site    
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.AdActivationRequired = newSettings.AdActivationRequired; 
                // Store Photos in Database   
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.StorePhotosInDatabase = newSettings.StorePhotosInDatabase;    
                // ... else: use the following directory to save uploaded Photos:    
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.ServerPhotoUploadDirectory = newSettings.ServerPhotoUploadDirectory; 
                // Maximum Number of Photos to Upload   
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.MaxPhotosPerAd = newSettings.MaxPhotosPerAd;    
                // Maximum Number of Days for which an Ad is active    
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.MaxAdRunningDays = newSettings.MaxAdRunningDays; 
                // Allow Users to edit their own Ads   
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.AllowUsersToEditAds = newSettings.AllowUsersToEditAds; 
                // Users to delete ads direclty in the database   
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.AllowUsersToDeleteAdsInDB = newSettings.AllowUsersToDeleteAdsInDB; 
                // Notifications to Administrators   
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.AdminNotification = newSettings.AdminNotification; 
                // Site Name   
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.SiteName = newSettings.SiteName; 
                // Contact Email Address for Site   
                ClassifiedsHttpApplication.ClassifiedsApplicationSettings.SiteEmailAddress = newSettings.SiteEmailAddress; 
                // Serialize to Xml Config File   
                return SaveToXml(ClassifiedsHttpApplication.ClassifiedsApplicationSettings);    
            }    
        } 
        private static SiteSettings LoadFromXml()   
        {    
            SiteSettings settings = null; 
            HttpContext context = HttpContext.Current;   
            if (context != null)    
            {    
                string configPath = context.Server.MapPath(XmlConfigFile); 
                XmlSerializer xml = null;   
                FileStream fs = null; 
                bool success = false;   
                int numAttempts = 0; 
                while (!success && numAttempts < 2)   
                {    
                    try    
                    {    
                        numAttempts++;    
                        xml = new XmlSerializer(typeof(SiteSettings));    
                        fs = new FileStream(configPath, System.IO.FileMode.Open, System.IO.FileAccess.Read);    
                        settings = xml.Deserialize(fs) as SiteSettings;    
                        success = true;    
                    }    
                    catch (Exception x)    
                    {    
                        // if an exception is thrown, there might have been a sharing violation;    
                        // we wait and try again (max: two attempts)    
                        success = false;    
                        System.Threading.Thread.Sleep(1000);    
                        if (numAttempts == 2)    
                            throw new Exception("The Site Configuration could not be loaded.", x);    
                    }    
                } 
                if (fs != null)   
                    fs.Close();    
            } 
return settings;
}
        public string GetXml()   
        {    
            StringBuilder result = new StringBuilder();    
            StringWriter s = new StringWriter(result);    
            try    
            {    
                XmlSerializer xml = new XmlSerializer(typeof(SiteSettings));    
                xml.Serialize(s, this);    
            }    
            finally    
            {    
                s.Close();    
            }    
            return result.ToString(); 
}
        private static bool SaveToXml(SiteSettings settings)   
        {    
            if (settings == null)    
                return false; 
            HttpContext context = HttpContext.Current;   
            if (context == null)    
                return false; 
string configPath = context.Server.MapPath(XmlConfigFile);
            XmlSerializer xml = null;   
            System.IO.FileStream fs = null; 
            bool success = false;   
            int numAttempts = 0; 
            while (!success && numAttempts < 2)   
            {    
                try    
                {    
                    numAttempts++;    
                    xml = new XmlSerializer(typeof(SiteSettings));    
                    fs = new FileStream(configPath, FileMode.Create, FileAccess.ReadWrite, FileShare.None);    
                    xml.Serialize(fs, settings);    
                    success = true;    
                }    
                catch    
                {    
                    // if an exception is thrown, there might have been a sharing violation;    
                    // we wait and try again (max: two attempts)    
                    success = false;    
                    System.Threading.Thread.Sleep(1000);    
                }    
            } 
            if (fs != null)   
                fs.Close(); 
return success;
        }   
    }    
} 
                    
                
                
            
        
浙公网安备 33010602011771号