2009-07-08 1 views
2

에 저장된 A 클래스의 개체 컬렉션을 serialize하려면 BinaryFormatter을 사용하고 있습니다. [Serializable] 태그를 추가했으며 A (GetObjectData과 특수 생성자 모두)에 ISerializable을 구현했습니다. deserialize 할 때 목록이 deserialize되고 직렬화 된 것과 동일한 수의 요소를 포함한다는 것을 알게되었습니다. 그러나 이러한 각 요소는 null 참조입니다.사용자 지정 .NET 직렬화가 작동하지 않는 것 같습니다.

예외가 있는지 확인하고 예외가 아닌지 확인했습니다. deserialization 중에 올바른 양식 번호가 A(SerializationInfo ^info, StreamingContext context)이라는 특수 생성자가 호출되었는지 확인했지만이 재구성 된 개체는 이 아니며 비 순차화 된 컬렉션에서 참조되는 것은입니다.

또한 System::Collections::Generic::List<A^>^array<A^>^으로 바꿨으며 여전히 동일한 결과가 나타납니다. 배열의 요소 수는 정확하지만 각 요소는 null 참조입니다.

비슷한 문제가있는 사람은 누구입니까? 모든 단서?

+1

이러한 종류의 질문에는 샘플 코드가 항상 유용합니다. –

+0

GetObjectData 메서드에서 ToArray()를 호출하고 있습니까? 나는 serialization 과정을 지나치게 생각하고 이와 동일한 행동을 시도했을 때 과거에 그 실수를 저질렀습니다. – Kleinux

+0

Kleinux, ToArray()를 호출하지는 않았지만 일단 작동하는지 확인하기 위해 시도했습니다. 그런 행운은 없습니다. –

답변

3

문제는 GetValue 호출 직후 자식 개체 내에서 참조 된 개체가 완전히 deserialize 될 필요가 없다는 것이 었습니다. 필자의 경우 일반 List은 아직 완전히 deserialize되지 않았으므로 null 참조 만 포함되었습니다. 객체 그래프가 완전히 deserialize 된 후에 코드를 실행하기 위해 마지막으로 IDeserializationCallback을 사용했습니다.

0

설명에 따르면 목록의 항목이 직렬화되지 않을 수도 있습니다. 해당 클래스를 제어 할 수 있으면 직렬화 가능 태그가 붙어 있는지 확인할 수 있습니까?

또한 XmlFormatter를 사용하여 직렬화 된 데이터를 시각적으로 검사하여 빌드 방법을 확인해 보았습니까? 직렬화 또는 비 직렬화 중에 문제가 발생하는지 여부에 대한 통찰력을 제공 할 수 있습니다.

+0

직렬화하려고하는 클래스를 제어 할 수 있습니다. 그것은 [Serializable] 태그가 붙어 있으며 참조하는 싱글 톤을 처리하기 위해 ISerializable을 구현합니다. –

+0

SoapFormatter (XmlFormatter 클래스를 찾을 수 없습니다 ... 비누를 의미한다고 가정)를 얻었습니다. Soap Serializer는 일반 유형의 직렬화를 지원하지 않습니다. –

+0

Err, yeah ... 내 이름이 섞여 있습니다. XmlFormatter가 아니라 System.Xml.Serialization 아래의 XmlSerializer에 대한 설명 – STW

관련 문제