2009-09-14 13 views
10

XML'in seri hale getirilmesi için bir sınıf oluşturmak için xsd.exe'yi kullanıyorum. xsd gelenxsd.exe oluşturulan sınıf ile null değer

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

çıkan sınıf aşağıdaki kodu oluşturur: Ben dikkat

private decimal balanceField; 

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

null değil ben gerekli değildir kaynak xsd ondalık değere sahiptirler. Bunun yerine olarak gösterildiği gibi null alan üretir nasıl

aşağıdaki gibidir:

private decimal? balanceField; 

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

cevap

8

Şu anda olması gerektiği gibi çalışıyor. Ben Xsd v2.0.50727.42 kullanarak ve ediyorum:

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

sen (yedekli ...Specified alanında ve mal olmadan) arıyordum tam olarak ne üretir: Maalesef

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

Sadece öğeler için çalışır, öznitelikleri sorulan sorular için değil. –

2

Sadece aslında aşağıdaki kodu dahil fark ettik:

private bool balanceFieldSpecified; 

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

işlevsellik sağlar İhtiyacım var.

Nullable kullanımı için şık bir yol var mı diye soruyu bir süre açık bırakacağım? yerine yazın.

+6

, xsd.exe etrafında .NET çerçevesinde var olan nullable türlerinden önce, bu yüzden her durumda çalışan bir çözüm bulmaları gerekiyordu. Ben xsd.exe yerine nullable türleri kullanmak ..... söylemek için herhangi bir yolu farkında değilim (birileri adım ve bir gün xsd.exe için yararlı bir alternatif oluşturmak gerekir! :-)) –

+0

Benzer bir kludge var xsd.exe tarafından üretilen DataSets için, bir özellik yerine, satır bir "IsBalanceNull()" yöntemi içerecektir. –

+0

@marc_s xsd2code bu işlevselliği sağlamaya çalışıyor. –

5

XML şema tanımınızda nillable = "true" eklerseniz, XSD bu öğe için geçersiz bir tür oluşturacaktır. Muhtemelen bu iyi bir fikirdir, çünkü bu değerin gerçekten de çözülebilir olduğunu ima ediyorsunuz ve bu, bu bağlamda şema tanımınızı daha açık hale getirecektir. Ne yazık ki, yine de bu durumda karşılık gelen "Belirtilen" alanını içermektedir. Diziselleştiricinin null değerine doğrudan uymasını istiyorsanız, oluşturulan koddan "xxSpecified" sütununu manuel olarak kaldırmanız gerekir.

İlgili konular