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); } }