をデシリアライズないコードを生成しました。この例では例えば:WSDLは、私は、次のものが含まれている私たちのサプライヤーの一つでWSDLを与えてきた適切にXMLに長い
<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
WSDLが取得しているXMLと一致しません。WSDLが修正されるたびにコードを修正するか、コードを修正する必要があります。回避策はありません。 – MiMo
または、サプライヤーに空の要素の代わりにnilを送信するよう依頼しますか?あるいは、どうにかしてXMLを前処理して修正する必要がありますか? – davidfrancis