xml序列化实现最近打开

来源:互联网 发布:ubuntu kylin 优麒麟 编辑:程序博客网 时间:2024/04/28 09:46

string fileName = Application.StartupPath + "//RecentFiles.config";
                if (System.IO.File.Exists(fileName))
                {
                    RecentFiles recnt = (RecentFiles)RecentFiles.Load(typeof(RecentFiles), fileName);
                    int k = this.tsmiRecent.DropDownItems.Count;
                    for (int i = recnt.Files.Count - 1; i >= 0; i--)
                    {
                        if (recnt.Files[i] == "")
                        {
                            continue;

                        }
                        ToolStripMenuItem menuitem = new ToolStripMenuItem(recnt.Files[i]);
                        this.tsmiRecent.DropDownItems.Insert(k, menuitem);
                        k++;
                        menuitem.Click += new EventHandler(menuitem_Click);
                    }
                }


using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace PCXEditor
{
   public class RecentFiles
    {
        private List<string>  _files=new List<string>();
       public List<string> Files
        {
            get { return _files; }
            set { _files = value; }
        }

        /// <summary>
        /// 指定オブジェクトの属性値をxmlファイルに書き込む
        /// </summary>
        /// <param name="obj">指定オブジェクト</param>
        /// <param name="fileName">xmlファイル名称(フルパス)</param>
        /// <returns>
        /// 正常に保存された場合 TRUE
        /// エラー発生の場合 FALSE
        /// </returns>
        public static bool Save(object obj, string fileName)
        {
            try
            {
                MyXmlSerializer mxs = new MyXmlSerializer();
                mxs.SerializeObject(obj, fileName);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 指定型のオブジェクトの属性値をxmlファイルから読込む
        /// </summary>
        /// <param name="type">オブジェクトの型(Type)</param>
        /// <param name="fileName">xmlファイル名称(フルパス)</param>
        /// <returns></returns>
        public static object Load(Type type, string fileName)
        {
            try
            {
                MyXmlSerializer mxs = new MyXmlSerializer();
                return mxs.DeserializeObject(type, fileName);
            }
            catch (Exception)
            {
                return null;
            }
        }
    }
}


using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.IO;

namespace PCXEditor
{
    public class MyXmlSerializer : System.Xml.Serialization.XmlSerializer
    {

        /// <summary>
        /// オブジェクトをシリアル化し、XMLファイルに保存する
        /// </summary>
        /// <param name="obj">シリアル化する対象</param>
        /// <param name="fileName">保存先のファイル名</param>
        public void SerializeObject(object @obj, string @fileName)
        {
            XmlSerializer serializer = null;
            FileStream fs = null;
            try
            {
                //XmlSerializerオブジェクトを作成
                //書き込むオブジェクトの型を指定する
                serializer = new XmlSerializer(@obj.GetType());
                //ファイルを作成
                fs = new FileStream(@fileName, FileMode.Create);
                //シリアル化し、XMLファイルに保存する
                serializer.Serialize(fs, @obj);
            }
            catch (Exception)
            {
            }
            finally
            {
                //閉じる
                fs.Close();
            }
        }

        /// <summary>
        /// ArrayList型を含むクラスのオブジェクトをシリアル化し、XMLファイルに保存する
        /// </summary>
        /// <param name="obj">シリアル化する対象</param>
        /// <param name="fileName">保存先のファイル名</param>
        /// <param name="types">ArrayListに挿入できるオブジェクト型のType配列</param>
        public void SerializeObject(object @obj, string @fileName,Type[] @types)
        {
            XmlSerializer serializer = null;
            FileStream fs = null;
            try
            {
                //XmlSerializerオブジェクトを作成
                //書き込むオブジェクトの型を指定する
                serializer = new XmlSerializer(@obj.GetType(), @types);
                //ファイルを作成
                fs = new FileStream(@fileName, FileMode.Create);
                //シリアル化し、XMLファイルに保存する
                serializer.Serialize(fs, @obj);
            }
            catch (Exception)
            {
            }
            finally
            {
                //閉じる
                fs.Close();
            }
        }

        /// <summary>
        /// XMLファイルから読み込み、逆シリアル化する
        /// </summary>
        /// <param name="fileName">保存先のファイル名</param>
        /// <param name="type">逆シリアル化されるオブジェクトのType</param>
        /// <returns></returns>
        public object DeserializeObject(Type @type, string @fileName)
        {
            XmlSerializer serializer = null;
            FileStream fs = null;
            object obj = null;
            try
            {
                //XmlSerializerオブジェクトの作成
                serializer = new XmlSerializer(@type);
                //ファイルを開く
                fs = new FileStream(@fileName, FileMode.Open);
                //XMLファイルから読み込み、逆シリアル化する
                obj = serializer.Deserialize(fs);
                //return
                return obj;
            }
            catch (Exception)
            {
                return null;
            }
            finally
            {          
                //閉じる
                fs.Close();
            }
        }
    }
}