有没有一种方法可以强制在Reference.cs中为wsdl

时间:2019-06-07 18:13:08

标签: c# wsdl xml-serialization

是否有一种方法可以对非复杂类型(例如字符串或整数)强制实施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属性?

0 个答案:

没有答案