Integer在webservice的传递
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;