2
我已經通過我們的供應商之一,給予了WSDL包含下面的代碼不反序列化長XML:WSDL生成正確
<xsd:element name="RegistrationResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DateTimeStamp" type="xsd:dateTime" nillable="true"/>
<xsd:element name="EchoData" type="xsd:string" nillable="true"/>
<xsd:element name="TransactionTrace" type="xsd:long" nillable="true"/>
<xsd:element name="ResponseCode" type="xsd:int" nillable="true"/>
<xsd:element name="ResponseMessage" type="xsd:string" nillable="true"/>
<xsd:element name="ClientAccNumber" type="xsd:long" nillable="true"/>
<xsd:element name="BranchCode" type="xsd:int" nillable="true"/>
<xsd:element name="HIN" type="xsd:long" nillable="true"/>
<xsd:element name="EasyPayRef" type="xsd:long" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
但是有時候響應我得到他們的回覆將不包含所有字段。例如,在這種情況下:
<soapenv:Body>
<tpw:RegistrationResponse>
<DateTimeStamp>
2012-04-02T19:10:41.4430564Z
</DateTimeStamp>
<EchoData/>
<TransactionTrace>
5418721751027669946
</TransactionTrace>
<ResponseCode>
25
</ResponseCode>
<ResponseMessage>
Invalid Mobile Account Type
</ResponseMessage>
<ClientAccNumber/>
<BranchCode/>
<HIN>
0
</HIN>
<EasyPayRef/>
</tpw:RegistrationResponse>
</soapenv:Body>
現在添加服務引用時在Visual Studio中的代碼生成的代碼不喜歡的事實,ClientAccNumber是空白。生成的代碼如下:
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://tpwebservice.x.com", Order=5)]
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
public System.Nullable<long> ClientAccNumber;
我得到一個「輸入不正確的格式」異常,當它試圖反序列化從服務器接收到的響應。我在想的是,它看到一個空白字符串,並試圖解析一長串,這顯然失敗了。我試圖將minOccurs =「0」添加到wsdl,但沒有幫助。
如何解決wsdl或生成的代碼來解決此問題?還是有什麼我失蹤?
但爲了添加額外的屬性,我需要編輯生成的代碼,這成爲一個噩夢,因爲每次WSDL重新生成時,更改都會丟失。 – Dylan 2012-04-02 20:55:56
您的WSDL與您獲得的XML不匹配 - 您將在每次修改WSDL或修復代碼時修復WSDL,但我沒有看到解決方法。 – MiMo 2012-04-02 21:38:02
或者要求供應商發送一個零而不是空的元素?或者你可以以某種方式預處理他們的XML並糾正它是必要的? – davidfrancis 2012-04-02 21:40:44