Вот моя дилемма, команда svcutil все еще генерирует параметр Order Named для сложного содержимого, помеченного как xsd: all.
Вот мой пример схемы.
<xsd:complexType name="SpecialReportEntityRow" >
<xsd:complexContent>
<xsd:extension base="list:BaseRowExt">
<xsd:all>
<xsd:element name="customerName" type="xsd:string" form="unqualified" minOccurs="0" maxOccurs="1" />
<xsd:element name="Id" type="xsd:long" form="unqualified" minOccurs="0" maxOccurs="1" />
<xsd:element name="certificateType" type="xsd:string" form="unqualified" minOccurs="0" maxOccurs="1" />
<xsd:element name="certificateValidity" type="xsd:long" form="unqualified" minOccurs="0" maxOccurs="1" />
<xsd:element name="item" type="xsd:long" form="unqualified" minOccurs="0" maxOccurs="1" />
<xsd:element name="description" type="xsd:string" form="unqualified" minOccurs="0" maxOccurs="1" />
<xsd:element name="quantity" type="xsd:long" form="unqualified" minOccurs="0" maxOccurs="1" />
<xsd:element name="startDate" type="xsd:dateTime" form="unqualified" minOccurs="0" maxOccurs="1" />
<xsd:element name="endDate" type="xsd:dateTime" form="unqualified" minOccurs="0" maxOccurs="1" />
</xsd:all>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
ДляСхема выше, Вот прокси сгенерированный фрагмент.Пожалуйста, обратите внимание, что он генерирует именованный параметр заказа в атрибуте.Несмотря на то, что схема содержит xsd: all content.
Основная проблема заключается в том, что порядок, в котором служба отправляет эти данные, является буквенным или произвольным порядком, следовательно, схема имеет xsd: all вместо xsd: sequence.Теперь во время выполнения, если у нас есть именованный параметр порядка, объект SpecialReportEntityRow инициализируется значениями по умолчанию, а не данными сервиса.Например, свойство CertificateType инициализируется пустой строкой, а CertificateValidaty инициализируется значением 0, все свойства инициализируются в значения по умолчанию.Во время выполнения не возникает ошибка десериализации.
Если я изменю прокси-класс, удалив именованный параметр XmlElementAttribute Order, то во время выполнения объект SpecialReportEntityRow получит правильные служебные данные.
Может кто-нибудь мне помочькак мне решить эту проблему, я не хочу изменять прокси-класс и почему xsd: all не учитывает svcutil.
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
public string customerName
{
get
{
return this.customerNameField;
}
set
{
this.customerNameField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
public long orgId
{
get
{
return this.orgIdField;
}
set
{
this.orgIdField = value;
}
}
Пример XML-ответа:
<ns5:rows xsi:type="ns7:SpecialReportEntityRow">
<certificateType>Dummy Type 1</certificateType>
<certificateValidity>2</certificateValidity>
<customerName>Customer1</customerName>
<description>Revocations by Reason - Unused</description>
<item>17</item>
</ns5:rows>
<ns5:rows xsi:type="ns7:SpecialReportEntityRow">
<certificateType>Dummy Type 2</certificateType>
<certificateValidity>2</certificateValidity>
<customerName>Custome1</customerName>
<description>Revocations by Reason- Ca Compromise</description>
<item>19</item>
</ns5:rows>