2010-05-03 48 views
6

我有一個簡單的模式,其中我聲明瞭兩個minOccurs和maxOccurs的爲1。當運行XSD.EXE以生成C#類和消耗在代碼的類;該字段不是強制執行的。是否有一些額外的步驟失蹤?或者使用XSD.exe生成的類不是必需的字段?XSD.EXE不強制的minOccurs

任何建議或意見將有所幫助。

回答

0

XSD.EXE不強制出現要求是正確的。這是設計的。

7

就像Visual Studio中的XML /推斷架構的工具,每當我用XSD.EXE我已經結束了固定一些生成的代碼。 XSD.exe做了一個很好的近似,但它不能完全工作。

minOccurs/maxOccurs 'bug'被記錄在MSDN上。

當從 XML架構文檔生成源代碼,XSD.EXE忽略 所述的minOccurs屬性施加到 <選擇>,<序列>,<組>,<所有>, 和<任何>元素。

對於元件,XSD.EXE 忽略的minOccurs屬性如果maxOccurs屬性的 值大於1 ,或無界的。在這個 的情況下,該工具產生一個對應於XSD數據 類型的類型 的數組。 Xsd.exe使用maxOccurs屬性的值 確定是生成單個實例 還是數組。

對於元件,XSD.EXE 也忽略,如果它被施加到一個轉換爲一個.NET Framework 引用類型的模式數據類型 所述的minOccurs屬性 。

只有當滿足下列所有條件 爲真確實XSD.EXE利用 值的minOccurs屬性的:

元件參與。

maxOccurs屬性指示一個 單個實例。

的數據類型轉換爲一個值 類型。

1

你會如何強制執行代碼任意的minOccurs?某種斷言?我猜你只能映射到「不可爲空的單實例」(1:1)非空數組(1:多)和它們的可空等價(0; 1)和(0:多)