Programing

Serializable 특성 사용과 ISerializable 구현의 차이점은 무엇입니까?

crosscheck 2020. 10. 25. 11:39
반응형

Serializable 특성 사용과 ISerializable 구현의 차이점은 무엇입니까?


Serializable속성 사용과 ISerializable인터페이스 구현 의 차이점은 무엇입니까 ?


SerializableAttribute속성 을 사용할 때 런타임에 직렬화 기능이 클래스 / 모듈 / 어셈블리에 대한 리플렉션을 수행하여 속성을 기반으로 직렬화 할 내용을 알 수 있도록 컴파일 타임에 필드에 속성을 넣습니다. 유형.

[Serializable]
public class MyFoo { … }

위의 내용은 직렬화 기능이 전체 클래스를 직렬화해야 함을 나타냅니다 MyFoo.

public class MyFoo
{
    private int bar;

    [Serializable]
    public int WhatBar
    {
       get { return this.bar; }
    }
}

속성을 사용하여 직렬화해야하는 필드를 선택적으로 선택할 수 있습니다.

ISerializable인터페이스 를 구현할 때 직렬화는 재정의 하고 (그리고 양식의 생성자를 제공함으로써) 사용자 정의 버전으로 효과적으로 재정의되며 , 데이터 직렬화에 대한 더 세밀한 제어가 가능합니다.GetObjectData SetObjectData MyFoo(SerializationInfo info, StreamingContext context)

StackOverflow에서 커스텀 직렬화의이 예제를 참조 하세요 . 직렬화 된 데이터의 다른 버전과 직렬화를 역 호환하도록 유지하는 방법을 보여줍니다.

도움이 되었기를 바랍니다.


SerializableAttribute는 기본 직렬화 프로세스를 수행 할 수있는 프레임 워크를 지시합니다. 더 많은 제어가 필요한 경우 ISerializable 인터페이스를 구현할 수 있습니다 . 그런 다음 GetObjectData메서드 에서 개체를 직렬화하고 SerializationInfo전달 된 개체를 업데이트하는 고유 한 코드를 넣 습니다.


ISerializable인터페이스를 구현할 수 있습니다 사용자 정의 직렬화 기본 이외. ISerializable인터페이스 를 구현할 때 GetObjectData다음과 같이 메소드 를 재정의해야 합니다.

public void GetObjectData (SerializationInfo serInfo, 
                                    StreamingContext streamContext)
{
   // Implement custom Serialization
}

ISerialize는 직렬화 논리를 수동으로 구현하도록 강제하는 반면, Serializable 특성으로 표시 (정말 했습니까?)는이 클래스를 직렬화 할 수 있음을 Binary serializer에 알려줍니다. 자동으로 수행됩니다.


ISerializable에서 상속하면 (역) 직렬화를 사용자 지정 구현할 수 있습니다. Serializable 속성 만 사용하는 경우 (역) 직렬화는 속성으로 만 제어 할 수 있으며 유연성이 떨어집니다.

참고 URL : https://stackoverflow.com/questions/2365152/whats-the-difference-between-using-the-serializable-attribute-implementing-is

반응형