Xsi:nil 특성의 바인딩 지원
이 항목은 레거시 기술과 관련된 것입니다. 이제 XML Web services와 XML Web services 클라이언트는 다음을 사용하여 만들어야 합니다. Windows Communication Foundation.
.NET Framework에서는 xsi:nil 특성에 대한 부분 바인딩 지원을 제공합니다.
XmlSerializer 클래스는 xsi:nil="true"
특성 값을 참조 형식 또는 nullable 값 형식에 지정된 null 참조와 동일화합니다. XmlSerializer는 nil 특성이 true
로 설정된 경우, null을 허용하지 않는 값 형식의 인스턴스를 deserialize하려고 할 때 예외를 throw합니다. nullable 형식에 대한 자세한 내용은 Nullable Types (C# Programming Guide)을 참조하십시오.
설명
nil 특성은 XML 스키마 인스턴스 네임스페이스 http://www.w3.org/2001/XMLSchema-instance(일반적으로 접두사 xsi와 연관됨)에 정의되며 XML 스키마 문서가 아닌 XML 인스턴스 문서에만 적용됩니다. XML 요소의 xsi:nil 특성 값이 true
이면 해당 요소에 자식 요소나 본문 텍스트와 같은 콘텐츠가 없음을 명시적으로 지정합니다.
nil 특성은 해당 XSD 선언에서 nillable 특성이 true
로 설정된 XML 요소에만 유효한 것으로 나타날 수 있습니다. .NET Framework에서 nillable="true"
설정이 개체에 해당하는 XML 요소로 설정되었는지 아니면 멤버에 해당하는 XML 요소로 설정되었는지를 확인하는 방법은 nillable 특성을 참조하십시오.
XmlSerializer 클래스는 nil 특성 값이 true
인 경우 null 참조(Visual Basic에서는 Nothing)와 동일시하여 다음과 같은 런타임 변환을 수행합니다.
XML 문서를 개체로 deserialize할 경우: XmlSerializer 클래스는
xsi:nil="true"
를 지정하는 XML 요소가 있으면 가능한 경우 해당 개체에 Null 참조를 할당합니다.개체를 XML 문서로 serialize할 경우: XmlSerializer 클래스는 XML 요소에 해당하는 개체에 Null 참조가 있으면
nillable="true"
설정의 적용 여부에 따라xsi:nil="true"
를 지정하는 요소를 생성하거나 해당 요소를 완전히 무시합니다.
nil 특성 및 nullable이 아닌 값 형식
nullable이 아닌 값 형식을 null 참조로 설정할 수 없으므로 그러한 형식의 클래스 멤버가 XML 요소 선언으로 매핑될 때 XmlSerializer 클래스는 serialization 중에 해당 인스턴스 요소에 대해 xsi:nil 특성을 표시할 이유가 없습니다.
XmlSerializer 클래스는 해당 데이터 형식이 nullable이 아닌 값 형식으로 매핑되고 nil 특성이 true
로 설정된 XML 요소를 deserialize할 수 없습니다. XML 문서를 개체로 deserialize할 경우 XmlSerializer 클래스는 이러한 요소가 있으면 System.FormatException: "입력 문자열의 형식이 잘못되었습니다"라는 오류를 표시합니다. 이러한 상황은 .NET Framework에서 null을 허용하지 않는 값 형식에 바인딩되는 스키마 데이터 형식 인스턴스에 nil 특성이 표시되도록 허용하는 XML 스키마 구현을 통해 XML 문서가 만들어진 경우에 발생할 수 있습니다.
nil 특성 및 기타 특성
XML 스키마 사양에 따르면 해당 xsi:nil 특성이 true
로 설정된 요소에 다른 XML 특성이 나타날 수 있습니다. 해당 개체에 null 참조가 지정된 경우에만 XmlSerializer 클래스가 nil 특성을 true
로 설정하므로 이 경우 System.Xml.Serialization.XmlAttributeAttribute 형식의 특성을 통해 XML 특성을 나타내는 개체 필드는 그 시점에 메모리에조차 존재할 수 없습니다.
따라서 XmlSerializer 클래스는 추가 특성을 다음과 같이 처리합니다.
개체를 XML 문서로 serialize할 경우: XmlSerializer 클래스에 nil 특성이 지정되어야 하는 XML 요소와 일치하는 개체에 Null 참조가 있으면 다른 특성은 모두 생략됩니다.
XML 문서를 개체로 deserialize할 경우: XmlSerializer 클래스는
xsi:nil="true"
를 지정하는 XML 요소가 있으면 해당 개체에 Null 참조를 할당하고 다른 특성은 모두 무시합니다. 다른 특성에xsi:nil="true"
를 지정할 수 있도록 허용하는 XML 스키마 구현을 통해 XML 문서가 만들어진 경우, 이러한 상황이 발생할 수 있으며 이 경우 결과적으로 nil 값true
는 null 개체 참조에 바인딩되지 않습니다.
문자열 형식에 부적합한 nil 특성
nillable 특성에 대해 기본값인 false
가 명시적으로 지정된 <element> 선언을 사용해 볼 수 있습니다.
<xsd:element name="key" type="xsd:string" nillable="false" />
이 요소는 IsNullable 속성에 대해 기본값인 false
가 명시적으로 지정된 상태로 다음 클래스 멤버에 바인딩됩니다.
[System.Xml.Serialization.XmlElementAttribute(IsNullable=false)]
public string key;
XML 인스턴스 문서에 이전 <element> 선언을 따르는 다음 요소가 포함되어 있다고 가정합니다.
<key xsi:nil="true"/>
이 요소는 nillable 정의의 특성 값이 false
일 때 nil 인스턴스 특성을 사용하므로 XmlValidatingReader 클래스에서는 이 요소를 잘못된 것으로 인식합니다. 그러나 XmlSerializer 클래스는 이 요소를 deserialze 하는 동안 예외를 throw하지 않고 해당 key
필드의 값을 빈 문자열(""
)로 설정합니다.
포함할 수 있는 요소: 모든 인스턴스 요소