In to the C#
2014. 1. 17. 14:32
Delegates와 Serialization
C#에서 클래스를 직렬화 하는 것은 매우 쉽습니다.
클래스 선언 전에 [Serializable] attribute만 추가 해주면 아주 멋지고 쉽게 직렬화가 가능합니다.
그런데 아래와 같은 delegates(이하 대리자)가 멤버로 있을 때 문제가 될 수 있습니다.
예제는 Action이 있는데요. C#의 대표적인 대리자가 있습니다. 대리자도 하나의 객체 이기 때문에 위와 같이 클래스를 선언하고 인스턴스를 직렬화 하게 되면 대리자도 같이 직렬화가 됩니다.
여기서 중요한건 역직렬화 할 때 잘 될 수도 있고, Exception 에러가 날 수도 있습니다. 대리자를 직렬화 하는건 매우 어려우며, 하더라도 내부의 타겟 객체의 모든 것을 제대로 직렬화 하는걸 보장 하지 않기 때문입니다.
결론적으로 대리자는 직렬화 대상에서 빼야 하며 설계 시 아래와 같이 해주어야 합니다. 개발자가 어떻게 직렬화 할 수 있는 문제가 아닙니다!!
Protobuf-net에서는 Protomember로 선언을 하여도 직렬화 대상이 되질 않으며, 역직렬화 시 null 값이 채워집니다.
'In to the C#' 카테고리의 다른 글
Lazy Initialization (0) | 2014.01.20 |
---|---|
BookSleeve - Pipelined .NET bindings for redis (0) | 2014.01.17 |
Dispose in C# (0) | 2014.01.14 |
Thread Pool과 Task (0) | 2014.01.14 |
Google Protocol Buffer 사용해보기 with C# - 세번째 (0) | 2014.01.14 |