2009-10-20 3 views
2

I는 XML serializer를 사용했지만, 난 이진 직렬화로 전환 할 때, 그것은 예외가 발생합니다 :왜 이진 직렬화에서 개체를 직렬화 가능으로 표시해야합니까?

Runtime error: dotNet runtime exception: Type 'MyTypes.MyObject' in Assembly 'MyTypes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

왜 그것이이 요청하는 방식에서 XML 시리얼 라이저와 다른를?

객체를 직렬화 가능으로 표시하면이 문제를 해결할 수 있습니까? 직렬화가 어떻게 일어나야 하는지를 지정하고 싶지 않습니다.

답변

9

XmlSerializer은 공개적으로 액세스 할 수있는 데이터 만 직렬화하기 때문에 클래스 사용자가 어쨌든 액세스 할 수 있기 때문에 모든 경우에 사용하는 것이 안전합니다.

모든 런타임 형식 자 (BinaryFormatter 포함)는 공개 및 비공개 액세스 정보를 직렬화하므로 호출자가 가져서는 안되는 정보에 액세스 할 수 있습니다. 귀하의 유형을 [Serializable]으로 표시함으로써 귀하는이 사실에 대해 생각해 보았고 귀하의 유형에 대한 일련의 정보를 누구에게나 볼 수있는 권한을 부여하고 있음을 효과적으로 나타냅니다.

신용 카드 세부 정보와 같은 민감한 데이터 또는 로그 나 데이터베이스와 같이 사용하지 않아야하는 장소를 실수로 직렬화하지 않도록하기 위해 "기본적으로 안전한"선택입니다.

2

BinaryFormatter과 xml serializers (명백한 출력 형식 제외)의 근본적인 차이점은 이진 serialization이 형식 정보 (개인/공용 속성, 메서드, 이벤트 등)를 유지한다는 것입니다. 이 유형의 직렬화가 리모팅과 함께 사용되는 이유 중 하나입니다. 유일한 요구 사항은 SerializableAttribute으로 유형을 꾸미는 것입니다.

관련 문제