첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ XML 직렬화/역직렬화 하기

----------------------------------------------------------------------------------------------------


TestProject.zip


Program.cs

 

 

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Xml.Serialization;

 

namespace TestProject

{

    /// <summary>

    /// 프로그램

    /// </summary>

    class Program

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// 사용자 리스트

        /// </summary>

        private static List<UserInfoUser> _userList = null;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        static void Main()

        {

            _userList = Deserialize("UserInfo.xml");

 

            foreach(UserInfoUser user in _userList)

            {

                Console.WriteLine("사용자 ID   : {0}", user.UserID  );

                Console.WriteLine("패스워드    : {0}", user.Password);

                Console.WriteLine("사용자 타입 : {0}", user.UserType);

                Console.WriteLine();

            }

 

            //Serialize(_userList, "UserInfoNew.xml");

        }

 

        #endregion

 

        #region 직렬화 하기 - Serialize<T>(sourceObject, filePath)

 

        /// <summary>

        /// 직렬화 하기

        /// </summary>

        /// <typeparam name="T">객체 타입</typeparam>

        /// <param name="sourceObject">소스 객체</param>

        /// <param name="filePath">파일 경로</param>

        private static void Serialize<T>(T sourceObject, string filePath)

        {

            XmlSerializer serializer = new XmlSerializer(typeof(UserInfo));

 

            using(FileStream stream = new FileStream(filePath, FileMode.Create))

            {

                using(StreamWriter writer = new StreamWriter(stream))

                {

                    stream.Position = 0;

 

                    serializer.Serialize(writer, sourceObject);

                }

            }

        }

 

        #endregion

        #region 역직렬화 하기 - Deserialize<T>(filePath)

 

        /// <summary>

        /// 역직렬화 하기

        /// </summary>

        /// <typeparam name="T">객체 타입</typeparam>

        /// <param name="filePath">파일 경로</param>

        /// <returns>타겟 객체</returns>

        private static T Deserialize<T>(string filePath)

        {

            T targetObject = default(T);

 

            XmlSerializer serializer = new XmlSerializer(typeof(UserInfo));

 

            using(FileStream stream = new FileStream(filePath, FileMode.Open))

            {

                using(StreamReader reader = new StreamReader(stream))

                {

                    stream.Position = 0;

 

                    targetObject = (T)serializer.Deserialize(reader);

                }

            }

 

            return targetObject;

        }

 

        #endregion

 

        #region 직렬화 하기 - Serialize(userList, filePath)

 

        /// <summary>

        /// 직렬화 하기

        /// </summary>

        /// <param name="userList">사용자 리스트</param>

        /// <param name="filePath">파일 경로</param>

        private static void Serialize(List<UserInfoUser> userList, string filePath)

        {

            UserInfo userInfo = new UserInfo();

 

            userInfo.Items = userList.ToArray();

 

            Serialize<UserInfo>(userInfo, filePath);

        }

 

        #endregion

        #region 역직렬화 하기 - Deserialize(filePath)

 

        /// <summary>

        /// 역직렬화 하기

        /// </summary>

        /// <param name="filePath">파일 경로</param>

        /// <returns>사용자 리스트</returns>

        private static List<UserInfoUser> Deserialize(string filePath)

        {

            UserInfo userInfo = Deserialize<UserInfo>(filePath);

 

            return userInfo?.Items?.ToList();

        }

 

        #endregion

    }

}

 

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요