2013-11-20 2 views
0

바이트 배열을 C#의 클래스 개체에 deserialize하려면이 기사 http://msdn.microsoft.com/en-us/library/ty01x675.aspx이 필요합니다. 자, SerializationInfo를 인수로 사용하여 MyObject라는 특수 생성자를 어떻게 호출합니까?클래스의 사용자 지정 (de) 직렬화에서 특수 생성자 호출

MyObject(SerializationInfo info, StreamingContext context) 

클래스 개체에 복사해야하는 바이트 배열이 있습니다.

+0

이렇게하려면'BinaryFormatter'을 사용하면되지만 특정 형식의 바이트 배열을 가지고있을 때는 작동하지 않을 것이라고 생각합니다. – svick

+0

예, BinaryFormatter가 내 바이트 배열에 적합하지 않습니다. –

답변

0

해당 생성자를 호출하면 안됩니다. BinaryFormatter는이를 수행합니다. 즉, 직렬화에 사용하는 것과 동일한 클래스/프레임 워크로 직렬화를 해제해야하므로 직렬화에 대해서만 묻는 것은 의미가 없습니다. MSDN 문서에서 사용자 정의 방법의 두면이 있다는 것을 알 수 있습니다 (GetObjectData 메서드는 다른 것입니다).

+0

GetObjectData는 객체 내용을 바이트 배열로 직렬화하기위한 것입니까? 역 생성, 즉 deserialization을 원한다면 특수 생성자가 거래라고 생각하는 이유입니다. –

+0

정확히 바이트 배열이 아니라 스트림과 비슷하지만 여러 가지를 의미 할 수 있지만 결국에는 바이트 스트림이 필요합니다. 그러나 모든 serializer는 매우 특정한 형식을 가지고 있으며 데이터는 일반적으로 동일한 엔진에서만 역 직렬화 할 수 있습니다. 언급 한 사용자 정의 직렬화는 전적으로 사용자 정의가 아니며 주로 BinaryFormatter에 묶여 있으며 serialize하는 _what_ 만 사용자 정의 할 수 있습니다 (_how_가 아닌). 바이트 배열을 가져 왔지만 동일한 엔진을 사용하여 비 직렬화해야합니다. BinaryFormatter와 GetObjectData 메서드가 아닌 경우에는 BinaryFormatter도 deserialize하지 않습니다. – fejesjoco

관련 문제