XSD.exe不强制执行minOccurs

时间:2010-05-03 14:00:53

标签: c# xml-serialization xsd.exe

我有一个简单的架构,我将minOccurs和maxOccurs都声明为1.当我运行XSD.exe生成一个C#类并在代码中使用该类时;该字段未强制执行。是否缺少一些额外的步骤?或者使用XSD.exe生成的类不是必填字段吗?

任何建议或见解都会有所帮助。

3 个答案:

答案 0 :(得分:7)

就像Visual Studio中的Xml /推断架构工具一样,每当我使用XSD.exe时,我最终修复了一些生成的代码。 XSD.exe做了很好的近似,但它不能完全正常工作。

MSDN上记录了minOccurs / maxOccurs 'bug'

  

从中生成源代码时   XML Schema文档,Xsd.exe忽略   应用于的minOccurs属性   <选择>,<序列>,< group>,<所有&gt ;,   和<任何>元件。

     

对于元素,Xsd.exe   如果是,则忽略minOccurs属性   maxOccurs属性的值是   大于1,或无界。在这   case,该工具生成一个数组   与XSD数据对应的类型   类型。 Xsd.exe使用的值   要确定的maxOccurs属性   是否生成单个实例   或数组。

     

对于元素,Xsd.exe   也忽略了minOccurs属性   如果它应用于架构数据类型   转换为.NET Framework   参考类型。

     

仅在满足以下所有条件时   Xsd.exe使用的是真的   minOccurs属性的值:

     

涉及元素。

     

maxOccurs属性指示a   单个实例。

     

数据类型转换为值   类型。

答案 1 :(得分:1)

如何在代码中强制执行任意的minoccurs?某种断言?我猜你只能映射到“非可空单个实例”(1:1)非可空数组(1:很多)及其可空等价物(0; 1)和(0:很多)

答案 2 :(得分:0)

您是正确的XSD.EXE不强制执行发生要求。这是按照设计的。