Integer在webservice的传递要注意的一个重要细节是MyBase元素的ID被类型xsd:int定义,并且包含minOccurs=0的属性。MyBase 的XML Schema定义如下所示:
1
<
xs:complexType
name
="MyBase"
>
2 < xs:sequence >
3 < xs:element minOccurs ="0" maxOccurs ="1" name ="ID" type ="xs:int"
4 nillable ="true" />
5 </ xs:sequence >
6 </ xs:complexType >
2 < xs:sequence >
3 < xs:element minOccurs ="0" maxOccurs ="1" name ="ID" type ="xs:int"
4 nillable ="true" />
5 </ xs:sequence >
6 </ xs:complexType >
当minOccurs=0时,表明ID属性可以在XML文档中省去。不过这将导致.NET平台的一个问题:在.NET中xsd:int映射为Int32,Int32是一个数值类型,数值类型不能为空。这就意味着,由于Int32的值必须是有效数值,所以无法决定是否设置ID属性。.NET框架通过创建另一个Boolean类型的IDSpecified变量来解决这个问题。此变量由.NET XML序列逻辑来检查,用以决定ID变量是否应该被设置,其本质就是给ID赋上NULL/not NULL的值。因此无论是否想访问ID变量,你都首先要检查或设置IDSpecified变量。关于这种运用模式的更多详细信息,请查阅XmlIgnoreAttribute类的MSDN文档。
故在客户端给int变量赋值时,同时设置IDSpecified=true;