是否有一种方法可以对非复杂类型(例如字符串或整数)强制实施FooSpecified?
我正在使用的Web服务将所有记录字段定义为nillable并且minOccurs = 0
<xsd:complexType name="Constituent">
<xsd:complexContent mixed="false">
<xsd:extension base="tns:Record">
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1" name="ConsId" nillable="true" type="xsd:nonNegativeInteger" />
<xsd:element minOccurs="0" maxOccurs="1" name="SiteId" nillable="true" type="xsd:nonNegativeInteger" />
<xsd:element minOccurs="0" maxOccurs="1" name="PredupStatus" nillable="true" type="xsd:string" />
它还指定了以Record作为参数的Update方法:
<xsd:element name="Update">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1" name="PartitionId" nillable="true" type="xsd:nonNegativeInteger" />
<xsd:element minOccurs="0" maxOccurs="1" name="Force" nillable="true" type="xsd:boolean" />
<xsd:element minOccurs="1" maxOccurs="unbounded" name="Record" type="ens:Record" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
成分记录有近200个元素,可以为null。 同时,如果更新请求中的空值超过10个,则将服务器端的Update方法编程为忽略所有空值。
从文件生成的Reference.cs不包含*字符串或整数的指定属性
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.3062.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:object.soap.convio.com")]
public partial class Constituent : Record {
private string consIdField;
private string siteIdField;
private string predupStatusField;
private System.Nullable<AdministratorStatus> adminStatusField;
private bool adminStatusFieldSpecified;
hich使XmlSerializer为每个字段生成行:
<q1:ConsId xsi:nil="true"/>
<q1:SiteId xsi:nil="true"/>
<q1:PredupStatus xsi:nil="true"/>
<q1:AdminStatus xsi:nil="true"/>
<q1:ConsName><q1:Title xsi:nil="true"/>
<q1:FirstName>234234</q1:FirstName>
<q1:MiddleName xsi:nil="true"/>
<q1:LastName>412341234</q1:LastName>
在我尝试将一个字段清空之前,它可以正常工作。那时,我试图屏蔽的字段正被发送为null并被服务器忽略,因为请求中有10个以上的null字段。为了能够从序列化中删除不需要的空行,我需要所有字段都具有* Specified属性,并仅在请求中发送我想要为空的字段。我可以手动添加它们,但是我需要记住很多工作,以免在刷新服务参考时被删除...
或者,是否有一种方法可以强制在Reference.cs中生成ShouldSerialize属性?