다음을 통해 공유


Xsi:nil 특성의 바인딩 지원

이 항목은 레거시 기술과 관련된 것입니다. 이제 XML Web services와 XML Web services 클라이언트는 다음을 사용하여 만들어야 합니다. Windows Communication Foundation.

.NET Framework에서는 xsi:nil 특성에 대한 부분 바인딩 지원을 제공합니다.

XmlSerializer 클래스는 xsi:nil="true" 특성 값을 참조 형식 또는 nullable 값 형식에 지정된 null 참조와 동일화합니다. XmlSerializernil 특성이 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 문서가 만들어진 경우, 이러한 상황이 발생할 수 있으며 이 경우 결과적으로 niltrue는 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 필드의 값을 빈 문자열("")로 설정합니다.

포함할 수 있는 요소: 모든 인스턴스 요소

참고 항목

참조

Nillable 특성의 바인딩 지원