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 속성 만 사용하는 경우 (역) 직렬화는 속성으로 만 제어 할 수 있으며 유연성이 떨어집니다.
'Programing' 카테고리의 다른 글
Android에서 EditText를 비활성화하는 방법 (0) | 2020.10.26 |
---|---|
프로세스가 시작될 때까지 Process.Start 대기 만들기 (0) | 2020.10.26 |
Dockerfiles 또는 이미지 커밋을 사용해야합니까? (0) | 2020.10.25 |
window.onload 대 body.onload 대 document.onready (0) | 2020.10.25 |
개인 멤버 데이터 직렬화 (0) | 2020.10.25 |