Loading

[WPF]xml序列化以及反序列化数据

代码

 

XML序列化工具类 

 public static class XMLHelper
    {
        /// <summary>
        /// 将对象序列化为指定的文件名
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static bool SaveObjAsXml<T>(T obj,string fileName)
        {

            var dir = Application.StartupPath;
            try
            {
                FileStream fs = new FileStream(dir+"/"+fileName, FileMode.Create);
                XmlSerializer xs = new XmlSerializer(typeof(T));
                xs.Serialize(fs, obj);
                fs.Close();
                return true;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }

        /// <summary>
        /// 将xml文件进行反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static T DecodeXML<T>(string fileName)
        {
            var dir = Application.StartupPath;
            fileName = dir + "/" + fileName;
            try
            {
                if (File.Exists(fileName)==false)
                    return default(T);
                FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                XmlSerializer xs = new XmlSerializer(typeof(T));
                T obj = (T)xs.Deserialize(fs);
                return obj;
            }catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw;
            }
            
        }
    }

 对应的窗体数据类可以定义为:

[XmlRoot]
    public class WindowsData:PropertyChangedBase
    {
        [XmlElement("WindowsIndex")]
        /// <summary>
        /// Windows窗体索引
        /// </summary>
        public int WindowsIndex{get;set; }

        [XmlElement("FontSize")]
        private double fontSize=14;
        /// <summary>
        /// 窗体字体
        /// </summary>
        public double FontSize
        {
            get { return fontSize;}
            set
            {
                fontSize=value;
                OnPropertyChanged("FontSize");
            }
        }


        private Point startUpPosition;
        [XmlElement("LeftTopWinPosition")]
        public Point StartUpPosition
        {
            get { return startUpPosition; }
            set
            {
                startUpPosition = value;
               
                OnPropertyChanged("StartUpPosition");
            }
        }
        

        /// <summary>
        /// 窗体宽度
        /// </summary>
        private int windowsWidth;
        public int WindowsWidth
        {
            get { return windowsWidth; }
            set { windowsWidth = value;OnPropertyChanged("WindowsWidth"); }
        }

        private int windowsHeight;
        public int WindowsHeight
        {
            get { return windowsHeight; }
            set
            {
                windowsHeight = value;
                OnPropertyChanged("WindowsHeight");
            }
        }


        private string richTextBoxContent;

        [XmlElement("UserInputNotes")]
        public string RichTextBoxContent
        {
            get { return richTextBoxContent; }
            set
            {
                richTextBoxContent = value;
                OnPropertyChanged("RichTextBoxContent");
            }
        }
        public WindowsData()
        {
//            MessageBox.Show("新的窗体数据加载了");
            WindowsIndex = GenerateWindowsIndex.Generate();
            WindowsWidth = 350;
            WindowsHeight = 450;
            double screenHeight = SystemParameters.FullPrimaryScreenHeight;
            double screenWidth = SystemParameters.FullPrimaryScreenWidth;
            StartUpPosition =new Point((screenWidth - WindowsWidth)/2,(screenHeight - WindowsHeight)/2);
        }
    }

 

posted @ 2019-01-29 10:43  李正浩  阅读(545)  评论(0编辑  收藏  举报