2012-03-12 3 views
8

나는 XML로 직렬화하기 위해 다소 큰 클래스가 있으며, 낭비되는 공간을 줄이기 위해 클래스 속성 중 일부를 선택적으로 XmlIgnore하고 싶습니다. 예를 들어, 클래스의 하나 개의 속성 값 열 배 정도의 단 하나의 아웃 할당, 나는 직렬화 속성을 코딩 할 경우 값이없는 경우XmlAttributes를 사용하여 XmlIgnore를 선택적으로 사용할 수 있습니까?

[XmlAttribute] 
public String WorkClass 
{ 
    get { return _workClass; } 
    set { _workClass = value; } 
} 

를 다음과 같이한다 (대부분의 시간)이있다 또 다시

WorkClass="" 

값이 비어있는 경우 직렬화에 대한 속성을 무시합니다 옵션 또는 속성이 있는가

로 직렬화, 그러나 비어 있지 않은 경우 그것을 무시하지?

답변

10

WorkClass이 빈 문자열이 아닌 다른 뭔가를 포함 할 때 .NET 프레임 워크 4를 사용하는 경우 당신은, 당신을 다음 방법은 true를 반환합니다 당신이

을 연재하지하고자하는 각각의 값에 대한 방법을 만들 수 있습니다 을 사용하도록 선택할 수 있으며, 이는 또한 ' ' 공백을 검사합니다.

public bool ShouldSerializeWorkClass() { 
    return !string.IsNullOrEmtpy(WorkClass); 
} 

는 XML 시리얼 실행

, 그것은 명명 규칙에 따라이 방법을 찾아서 그 속성을 직렬화할지 여부를 선택합니다.

메서드 이름은 항상 ShouldSerialize으로 시작해야하며 속성 이름으로 끝나야합니다. 그런 다음 값을 직렬화할지 여부와 관계없이 원하는 조건에 따라 부울 값을 반환하면됩니다.

+4

놀라운 소식입니다. 또한 비 직관적 인 IMHO입니다. [XmlAttribute (IgnoreOnNullOrEmpty = "true")]와 같은 일종의 직렬화 속성에 대한 수정자를 기대했을 것입니다. – Cyberherbalist

관련 문제