2016-10-27 11 views
1

私たちはサードパーティと統合しており、リクエストから得られたレスポンスをデシリアライズするのに問題があります。生成されたクラスへのSOAPレスポンスのデシリアライズC#

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body> 
    <ns2:updateItemsResponse xmlns:ns2="http://ThirdParty/dmn/items/1.1"> 
    <fileId>bd6e7d83-8bfu-4573-fe32-c67c04355dd0</fileId> 
    <fileName>12345.MBG_Items.002.2016-10-26-16-23-35.xml</fileName> 
    </ns2:updateItemsResponse> 

しかし、我々はupdateItemsResponseオブジェクトに適切にそれをデシリアライズすることはできません:シオマネキから、私は応答を見ることができます。オブジェクトは作成されますが、fileIdとfileNameは両方ともnullです。 私たちは、この要求と応答のためのクラスが生成され、以下に生成されたクラスです。

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] 
[System.ServiceModel.MessageContractAttribute(WrapperName = "updateItemsResponse", WrapperNamespace = "http://ThirdParty/dmn/items/1.1", IsWrapped = true)] 
public partial class updateItemsResponse 
{ 
    [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://ThirdParty/dmn/items/1.1", Order = 0)] 
    public string fileName; 

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "http://ThirdParty/dmn/items/1.1", Order = 1)] 
    public string fileId; 

    public updateItemsResponse() 
    { 
    } 

    public updateItemsResponse(string fileId, string fileName) 
    { 
     this.fileId= fileId; 
     this.fileName= fileName; 
    } 
} 

我々は、WebサービスはJavaで書かれていた知っている、と我々はいくつかの問題は、クラスファイルを生成していた - 私たちがしたWSDLを私たちがsvcutil.exeを使ってクラスファイルを作成する前に、いくつかのジークリーポケリーが必要でした。だから、私は生成されたファイルにいくつか調整が必要だと思う。

私はこれについていくつかの検索を行いましたが、ここで問題を推測していますが、これは名前空間ですが、これを動作させることはできません。名前空間を変更し、名前空間を削除し、fileIdとfileNameの順序を変更しようとしましたが、これらのどれもが何の違いもありませんでした。

明らかに何かを見ることができる人はいませんか?それは私を夢中にさせている!

EDIT:fileIdとfileNameをXmlElementに変更しましたが、まだnull応答が返されました。

+0

fileIdとfileNameにNamespace修飾属性が必要ですか?彼らは、フィドラーの出力で名前空間を使用していないようです –

+0

私はすでに名前空間属性を削除しようとしました。しかし、喜びはありません! – Misemefein

+0

代わりにこの属性を追加してみてください。 [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] –

答えて

2

ユーレカ!

fileIdとfileNameの属性が間違っていました。それらを変更するだけで

[System.ServiceModel.MessageBodyMemberAttribute(Name = "fileId", Namespace = "", Order = 0)] 
    public string fileId; 

    [System.ServiceModel.MessageBodyMemberAttribute(Name = "fileName", Namespace = "", Order = 1)] 
    public string fileName; 

に変更する必要があり、レスポンスをデシリアライズできるようになりました。

関連する問題