WSDL: ошибка с массивами

#c# #xsd #wsdl

#c# #xsd #wsdl

Вопрос:

У меня есть WSDL, из которого я создаю объекты на c#

 <xsd:complexType name="ArrayOfPlentysoapresponsemessage">
  <xsd:sequence>
    <xsd:element name="item" type="tns:PlentySoapResponseMessage" minOccurs="0" maxOccurs="2" nillable="true"/>
  </xsd:sequence>
 </xsd:complexType>
  

Результирующий код является

 private PlentySoapResponseMessage[] itemField;
/// <remarks/>
[System.Xml.Serialization.XmlArrayItemAttribute("PlentySoapResponseMessage", typeof(PlentySoapResponseMessage), IsNullable = false)]
public PlentySoapResponseMessage[] item {
  get {
    return this.itemField;
  }
  set {
    this.itemField = value;
  }
}
  

Я получаю ошибки от c # о том, что десериализация не работает
Причина, которую я обнаружил, заключается в том, что массив приводит к проблеме, поскольку при удалении остается один элемент и ошибки нет

Вот сообщение

[Система.ServiceModel.Исключение CommunicationException] = {«Ошибка при десериализации тела ответного сообщения для операции «GetAuthentificationToken»».}

Трассировка стека сервера:

 at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeReply(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.ProxyOperationRuntime.AfterReply(ProxyRpcamp; rpc)
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpcamp; rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
  

Ответ №1:

Вы должны использовать C # API, заканчивающийся на c

Пожалуйста, измените your-shop.de/plenty/api/soap/version114 / to your-shop.de/plenty/api/soap/version114c / и сгенерируйте новые классы C # с помощью C # WSDL your-shop.de/plenty/api/soap/version114c/?xml