Есть ли способ обеспечить создание * указанного свойства в Reference.cs для полей не сложного типа в wsdl - PullRequest
1 голос
/ 07 июня 2019

Есть ли способ заставить принудительно генерировать FooSpecified для не сложных типов, таких как строки или целые числа?

Веб-служба, с которой я работаю, определяет все поля записи как 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" />

Также указывает метод обновления с параметром Запись в качестве аргумента:

      <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 элементов, которые могут быть нулевыми.В то же время метод обновления на стороне сервера запрограммирован на игнорирование всех нулевых значений, если их в запросе на обновление более 10.

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;

, что заставляет 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>

Что работает нормально, пока я не попытаюсь очистить поле.В этот момент поле, которое я пытаюсь закрыть, отправляется как пустое и игнорируется сервером, поскольку в запросе содержится более 10 пустых полей.Чтобы иметь возможность удалять ненужные нулевые строки из сериализации, мне нужно, чтобы все поля имели * указанное свойство и отправляли в запросе только поле, которое я хочу иметь нулевое.Я могу добавить их вручную, но мне нужно запомнить большую работу, чтобы сохранить ее в другом месте, чтобы избежать ее удаления при обновлении ссылки на службу ...

В качестве альтернативы, есть ли способ принудительно генерировать свойство ShouldSerialize вReference.cs

...