2010-04-20 6 views

답변

2

개인 Default ShouldSerializeXxx() 메서드는 [DefaultValue] 특성의 대안입니다. DefaultValueAttribute 생성자에서 표현할 수 없거나 복잡한 표현식이 필요한 상태에 따라 기본값이 달라질 수 있기 때문에이 속성을 항상 사용할 수있는 것은 아닙니다.

메서드는 Reflection을 통해 실행되며 PropertyDescriptor.ShouldSerializeValue() 메서드를 통해 노출됩니다. 이 배관의 중요한 고객은 PropertyGrid 컨트롤 (굵은 글꼴을 선택하는 데 사용) 및 Windows Forms 디자인 타임 코드 serializer (불필요한 코드를 억제하는 데 사용)입니다.

1

직렬화는 리플렉션을 사용하여 속성에 액세스하므로 리플렉터에서 사용법이 표시되지 않는 이유를 설명합니다.

이 등록 정보는 직렬화 프로세스에 Visible 등록 정보가 기본값에서 변경되었으며 직렬화되어야 함을 알려줍니다.

0

디자이너 및 직렬 변환기 구현에서 사용되는 규칙 기반 패턴입니다. 예를 들어, ComponentModel에 : 존재하는 경우

 PropertyDescriptor prop = TypeDescriptor.GetProperties(obj)["Visible"]; 
     if (prop.ShouldSerializeValue(obj)) 
     { // write it... 

     } 

는 그 메소드를 호출합니다. 같은 방식으로,이 ShouldSerializeValue 추상화는 또한 일부 속성을 으로 굵게 표시합니다.PropertyGrid (참고 : 또한 [DefaultValue]과 같은 것으로 보입니다).

(PropertyDescriptor 바인딩의 용어와 디자이너에서 임의의 속성에 대해 이야기하는 원래의 방법입니다)

마찬가지로, 일부 시리얼 라이저 (확실히 XmlSerializer뿐만 아니라 DataContractSerializer 내가 생각 - 그리고 protobuf - 그물)이 패턴을 존중, 그 속성을 직렬화하기를 원한다면 객체에 요청합니다.

관련 문제