2012-01-16 2 views
4

나는 직렬화하는 클래스가 있습니다. 나는 [Serializable]으로 주석을 달았고 바이너리 시리얼 라이저를 사용하고있다. 모든 것이 잘 작동합니다.인스턴스의 직렬화 및 비 직렬화에 대한 반응

하지만 나중에 직렬화 할 수없는 새로운 속성이 추가되었습니다 (GUI에 대한 혼란 스러울 필요가없는 말). 클래스의 다른 속성을 기반으로 이러한 속성을 계산할 수 있습니다.

내가 두 번해야하는데, 내가 직렬화 할 때 - 혼란을 피하고 직렬화를 위해 안정된 상태로 들어간다. 그리고 deserialization - 다시 필요한 모든 속성을 계산합니다.

'이벤트'인스턴스에 반응해야합니다. 인스턴스가 직렬화/역 직렬화되고 있습니다.

그러나 인터페이스 ISerializable 또는 추상 클래스 Aserializable을 구현하지 않고 클래스 공헌자 [Serializable] 만 구현할 예정이므로 이러한 이벤트를 찾을 수 없습니다.

클래스가이 클래스의 관심사가 아니기 때문에 클래스가 serialize되는시기를 알 수 없습니다. 다른 클래스의 필드로서 직렬화됩니다.

이러한 이벤트에 대응할 수있는 방법이 있습니까?

+0

이렇게하려면 'ISerializable'을 구현해야합니다. –

답변

2

OnDeserializedAttribute 및 관련 특성 (OnSerializing, OnSerialized, OnDeserializing)을 사용하여 serialization/deserialization 프로세스 중에 호출되는 특수 메서드를 만들 수 있습니다.

0

빌드 Custome Serialization ISerializable을 구현하십시오. serilazation 전에 객체를 조작하려면 OnSerializingAttribute을 사용하고, 비 직렬화하기 전에 조작하려면 OnDeserializingAttribute을 사용하십시오.

+0

직렬화 프로세스 자체와 상호 작용하려는 경우 ISerializable 만 구현하면됩니다. OP의 경우, 속성과 '직렬화 이벤트'메소드를 사용하는 것으로 충분합니다. –

0

[XmlIgnoreAttribute] 속성을 우연히 고려 했습니까? 속성을 직렬화하지 못하게합니다. 직렬화 워크 플로를 무단 변경할 필요가 없습니다.

나쁘거나, 당신이 deserialization에 일부 속성을 다시로드하고 싶지 않다는 것을 알지 못했습니다. 그렇다면 이들을 직렬화하지 않는 이유는 무엇입니까? 선택적인 subObject 또는 무엇이든간에?

+0

그는 이진 serializer를 사용하고 있습니다. '[XmlIgnoreAttribute]'는 바이너리 시리얼 라이저에 영향을주지 않습니다. 바이너리 또는 SOAP로 직렬화하는 경우 NonSerialized를 사용하고, XmlSerializer를 사용하여 XML로 엄격하게 직렬화하는 경우 XmlIgnore를 사용합니다. MSDN의'[NonSerializedAttribute] 클래스의 비고 부분을 보라. http://msdn.microsoft.com/en-us/library/system.nonserializedattribute.aspx – Aphelion

+1

Dutifuly 명시된. 고맙습니다. 그러나 문제는 여전히 남아 있습니다 : 바닐라 직렬화를 'disaply'속성과 함께 사용하거나 GET 접근 자에서 + 값 계산없이 사용하는 것이 어떻습니까? – Vinzz

관련 문제