/// <summary>
    /// Serialize할 유형입니다.
    /// </summary>
    public enum SerializeType
    {
        /// <summary>
        /// BinaryFormatter
        /// </summary>
        BinaryFormatter,
        /// <summary>
        /// SoapFormatter
        /// </summary>
        SoapFormatter
    }

    /// <summary>
    /// Serialize와 Deserialize를 편리하게 이용하는 Static Class
    /// </summary>
    public static class Serialization
    {
        /// <summary>
        /// 직렬화합니다.
        /// </summary>
        /// <param name="serializeType">Serialize 유형</param>
        /// <param name="filePath">Write할 파일경로</param>
        /// <param name="graph">그래프의 루트에 있는 serialize할 개체입니다.</param>
        public static void Serialize(SerializeType serializeType, string filePath, object graph)
        {
            try
            {
                switch (serializeType)
                {
                    case SerializeType.BinaryFormatter: BinaryFormatterSerialize(filePath, graph); break;
                    case SerializeType.SoapFormatter: SoapFormatterSerialize(filePath, graph); break;
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        /// <summary>
        /// 역직렬화합니다.
        /// </summary>
        /// <param name="serializeType">Serialize 유형</param>
        /// <param name="filePath">Read할 파일경로</param>
        /// <param name="graph">그래프의 루트에 있는 Deserialize할 개체입니다.</param>
        public static object Deserialize(SerializeType serializeType, string filePath, object graph)
        {
            try
            {
                switch (serializeType)
                {
                    case SerializeType.BinaryFormatter: return BinaryFormatterDeserialize(filePath, graph); 
                    case SerializeType.SoapFormatter: return SoapFormatterDeserialize(filePath, graph); 
                }
                throw new NotSupportedException("지원하지 않는 형식입니다.");
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        /// <summary>
        /// BinaryFormatter를 이용해 Serialize합니다.
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="graph"></param>
        private static object BinaryFormatterDeserialize(string filePath, object graph)
        {
            FileStream fs = null;
            try
            {
                fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                BinaryFormatter bf = new BinaryFormatter();
                object obj = bf.Deserialize(fs);
                fs.Close();
                return obj;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                
                if (fs != null)
                    fs.Close();
            }
        }


        /// <summary>
        /// SoapFormatter를 이용해 Serialize합니다.
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="graph"></param>
        private static object SoapFormatterDeserialize(string filePath, object graph)
        {
            FileStream fs = null;
            try
            {
                fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                SoapFormatter sf = new SoapFormatter();
                object obj = sf.Deserialize(fs);
                fs.Close();
                return obj;
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (fs != null)
                    fs.Close();
            }
        }


        /// <summary>
        /// BinaryFormatter를 이용해 Serialize합니다.
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="graph"></param>
        private static void BinaryFormatterSerialize(string filePath, object graph)
        {
            FileStream fs = null;
            try
            {
                fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fs, graph);
                fs.Close();
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (fs != null)
                    fs.Close();
            }
        }


        /// <summary>
        /// SoapFormatter를 이용해 Serialize합니다.
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="graph"></param>
        private static void SoapFormatterSerialize(string filePath, object graph)
        {
            FileStream fs = null;
            try
            {
                fs = new FileStream(filePath, FileMode.Create, FileAccess.Write);
                SoapFormatter sf = new SoapFormatter();
                sf.Serialize(fs, graph);
                fs.Close();
            }
            catch(Exception e)
            {
                throw e;
            }
            finally
            {
                if (fs != null)
                    fs.Close();
            }
        }
       
    }

'.Net > C#' 카테고리의 다른 글

유니코드표  (0) 2012.09.24
C# Excel 범위로 데이터들 가져오기  (0) 2012.08.30
C# DoubleBuffering (더블 버퍼링)  (0) 2012.08.07
C# UserControl->UserControl 네이버 지식인 답변  (0) 2012.07.17
C# Thread Test Project  (0) 2012.07.11

+ Recent posts