2009-09-14 4 views
10

xsd.exe를 사용하여 XML을 비 직렬화 할 클래스를 생성했습니다. XSD에서xsd.exe가있는 Nullable 값은 클래스를 생성했습니다.

<xs:attribute name="Balance" type="xs:decimal" use="optional" /> 

결과 클래스는 다음 코드를 생성합니다 : 나는주의

private decimal balanceField; 

[System.Xml.Serialization.XmlAttributeAttribute()] 
public decimal Balance { 
    get { 
     return this.balanceField; 
    } 
    set { 
     this.balanceField = value; 
    } 
} 

이 널 (NULL) 입력 가능하지 내가 필요하지 않은 원본 XSD에서 진수 값을 가지고있다. 내가 대신으로 도시로 널 (NULL) 분야를 생성하려면 어떻게

은 다음과 같습니다

private decimal? balanceField; 

[System.Xml.Serialization.XmlAttributeAttribute()] 
public decimal? Balance { 
    get { 
     return this.balanceField; 
    } 
    set { 
     this.balanceField = value; 
    } 
} 

답변

8

현재 작동해야합니다. 나는 XSD의 v2.0.50727.42을 사용하고 있습니다 :

<xs:element name="Port" type="xs:int" nillable="true" /> 

당신이 (중복 ...Specified 필드와 재산없이) 찾고 있던 정확히 생성 : 불행하게도

private System.Nullable<int> portField; 

[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)] 
public System.Nullable<int> Port { 
    get { 
     return this.portField; 
    } 
    set { 
     this.portField = value; 
    } 
} 
+5

요소에 대해서만 작동하며, 질문에는 원래 질문과 달리 속성에 대해 작동하지 않습니다. –

2

난 그냥 실제로 다음과 같은 코드를 포함하고있다 것으로 나타났습니다 :

private bool balanceFieldSpecified; 

[System.Xml.Serialization.XmlIgnoreAttribute()] 
public bool BalanceSpecified { 
    get { 
     return this.balanceFieldSpecified; 
    } 
    set { 
     this.balanceFieldSpecified = value; 
    } 
} 

기능을 제공합니다 나는 필요하다.

nullable을 사용하는 우아한 방법이있는 경우를 대비하여 잠시 질문을 남기겠습니까? 대신 입력하십시오.

+6

, xsd.exe는 주변에 .NET 프레임 워크에 존재하는 nullable 타입 이전의 방법으로, 어떤 경우에도 작동하는 솔루션을 찾아야했습니다. 나는 xsd.exe에게 nullable 타입을 대신 사용하는 법을 알고 있지 않다 ..... (누군가는 xsd.exe에 대한 유용한 대안을 만들어야한다. :-)) –

+0

비슷한 kludge가있다. xsd.exe가 DataSets를 생성했기 때문에, 속성 대신에'IsBalanceNull()'메소드가 포함될 것입니다. –

+0

@marc_s xsd2code가 해당 기능을 제공하려고합니다. –

5

XML 스키마 정의에 nillable = "true"을 추가하면 XSD는 해당 요소에 대해 null 가능 유형을 생성합니다. 이것은 아마 좋은 아이디어입니다. 왜냐하면 여러분은이 값이 실제로 nillable이라는 것을 의미하므로이 점에서 스키마 정의가 더 명확하게 나타낼 것이기 때문입니다.

불행히도이 경우 해당 "지정됨"필드가 여전히 포함되어 있습니다. serializer가 nullable 값을 직접 따르도록하려면 생성 된 코드에서 "xxSpecified"열을 수동으로 제거해야합니다.