[C#] 12.1.1 선별적 직렬화

C#에서는 형식 내부의 멤버 필드 중에서 직렬화와 역직렬화에 포함하지 않게 선별적 직렬화를 제공합니다. 선별적 직렬화는 멤버 필드에만 적용할 수 있는데 직렬화 대상에서 빼고 싶은 멤버 위에 NonSerialized 어튜리뷰트를 지정합니다.

예를 들어 사용자가 로그인하여 게임을 진행할 때 공부한 시간이 5이면 아이큐를 증가한다고 가정합시다. 만약 사용자가 로그아웃하면 공부한 시간은 사라지고 다시 로그인 하면 다시 0부터 시작하게 합시다. 직렬화와 역직렬화를 이용한다면 공부한 시간을 직렬화 대상에서 배제합니다.

[Serializable]
class Unit
{
    [NonSerialized]
    int scnt;//공부한 횟수
    internal string Name
    {
        get;
        private set;
    }
    internal int IQ
    {
        get;
        private set;
    }
    internal Unit(string name)
    {
        Name = name;
        IQ = 0;
    }
    internal void Study()
    {
        scnt++;
        if (scnt == 5)
        {
            IQ++;
            scnt = 0;
        }
    }
    public override string ToString()
    {
        return string.Format("이름:{0} 아이큐:{1} 공부한 시간:{2}", Name, IQ, scnt);
    }
}