2011-05-09 5 views
3

자신의 직렬화/직렬화를 구현하는 클래스가 있지만 system.runtime.serialization.ISerializable을 구현하지 않고이 모든 작업을 수행하고 있습니다. 그래서 내 질문에 정확히 system.runtime.serialization.ISerializable 사용의 이점은 무엇입니까?어떤 아키텍처가 system.runtime.serialization.ISerializable을 사용합니까?

어떤 상황에서 우리는 system.runtime.serialization.ISerializable을 구현해야합니까?

답변

3

직렬화는 표준 .net 직렬화 메커니즘과 통합되지 않습니다. BinaryFormatter과 함께 사용할 수 없습니다. ISerializable은 a) 제어 직렬화 b) 이진 직렬화의 표준 메커니즘에 통합 할 수 있습니다.

또한 자신 만의 직렬화를 작성하기로 결정한 것은 매우 이상합니다. 이것은 효율적인 생산 품질의 직렬화를 작성하는 데 다소 비쌉니다. 특히 .net에서 사용할 준비가 된 바이너리 및 XML 직렬화와 Protobuf 및 Thrift와 같은 멋진 제 3의 타사 제품이있는 경우가 있습니다.

위 예제는 실제로 MSDN의 ISerializable page에 나와 있습니다.

실용적인 예제 중 하나는 이진 직렬화에 연결하고자 할 때 DateTime을 직렬화 할 때 시간대를 잃어 버리는 것입니다. 당신이 단지이 필드를 직렬화보다 조금 더 복잡한 데이터를 유지해야 할 때

+0

동의; 직렬화는 공통 및 모서리 케이스에 대해 걱정할 시간을 허비하는 바보들에 의해 * 라이브러리 * 코드에 의해 더 잘 처리됩니다. –

+0

@Marc Gravell ♦ 그렇습니다. 직렬화는 결코 구현하려고 시도하지 않는 기능입니다. 왜냐하면 나는 얼마나 많은 시간이 소비되고 여전히 진절머리 나게 될지 상상할 수 없기 때문입니다. – Andrey

+1

내 현재 추정치가 "많이"라고 생각합니다. –

2

ISerializable (.NET 2.0 적어도) BinaryFormatter에 의해 사용된다 - 예를 들어, 당신이 다른 데이터를 처리 할 (아마도 응축 예를 들어, 사전은 메모리가 꽤 넓지 만 전선의 키/값 목록 일 수 있습니다. 마찬가지로 "연결된 목록"- 첫 번째 노드를 직렬화하는 대신 하나의 객체 (목록)의 직렬화에 을 반복하고 해당 노드와 다음 노드 등을 직렬화해야합니다.

관련 문제