Есть ли способ заставить принудительно генерировать 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