첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.

728x90
반응형
728x170

TestProject.zip
0.01MB

▶ 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
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요