将文件反序列化为对象

 /// <summary>
        /// 将文件反序列化为对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="saveKey"></param>
        /// <param name="appRoot"></param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static T BinaryDeserializeObject<T>(string saveKey, string appRoot, T defaultValue)
        {

            string[] fileArgs = saveKey.Split('.');

            string filepath = Path.Combine(appRoot, string.Join(@"\", fileArgs) + ".dat");

            BinaryFormatter formatter = new BinaryFormatter();

            T myObject;

            try
            {
                using (FileStream myFileStream = new FileStream(filepath, FileMode.Open))
                {
                    myObject = (T)formatter.Deserialize(myFileStream);
                }

            }
            catch
            {
                if (!File.Exists(filepath))
                {
                    if (!Directory.Exists(Path.GetDirectoryName(filepath)))
                    {
                        Directory.CreateDirectory(Path.GetDirectoryName(filepath));
                    }
                }
                BinarySerializeObject(saveKey, appRoot,defaultValue);

                using (FileStream myFileStream = new FileStream(filepath, FileMode.Open))
                {
                    myObject = (T)formatter.Deserialize(myFileStream);
                }


            }

            return myObject;


        }

        /// <summary>
        /// 将对象序列化为文件
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="saveKey"></param>
        /// <param name="appRoot"></param>
        /// <param name="t"></param>
        public static void BinarySerializeObject<T>(string saveKey, string appRoot, T t)
        {
            string[] fileArgs = saveKey.Split('.');

            string filepath = Path.Combine(appRoot, string.Join(@"\", fileArgs) + ".dat");

            BinaryFormatter formatter = new BinaryFormatter();

            using (FileStream myWriter = new FileStream(filepath, FileMode.OpenOrCreate))
            {
                formatter.Serialize(myWriter, t);
                myWriter.Close();
            }
        }

posted on 2010-07-07 06:48  西湖浪子  阅读(177)  评论(0)    收藏  举报