私は Web サービスの呼び出しを使用しており、クライアントで WCF によって生成されたサービス参照を使用しています。テスト サービスから受信した XML 応答をディスクに保存しました (SOAP エンベロープとボディ タグなし)。それらをディスクから読み込み、そこからオブジェクトを作成したいと考えています。私のWebサービスから次のメソッドを取りましょう:
SomeMethodResponse SomeMethod(SomeMethodRequest req)
手動で (SOAP UI を使用して) ディスクへの応答をファイルに保存します。応答の例:
<SomeMethodResponse xmlns="http://myNamespace">
<SomeMember1>value</SomeMember1>
</SomeMethodResponse>
次に、次を使用してファイルからオブジェクトを逆シリアル化しようとします。
DataContractSerializer dcs =
new DataContractSerializer(typeof(SomeMethodResponse))
これは失敗します。シリアライザーは、名前空間 ' http://schemas.datacontract.org/2004/07 ' に要素が必要であるが、' http://myNamespace 'に要素が見つかったというエラーで不平を言います。
質問:DataContractSerializer
SomeMethodResponseType で宣言されている名前空間を使用しないのはなぜXmlTypeAttribute(Namespace="http://myNamespace")
ですか?
DataContractSerializer
名前空間とルート要素をコンストラクターに明示的に指定することで、これを回避できます。しかし、次のようなメッセージで失敗します。
行 X の位置 Y (XML ドキュメントの最後の行) にエラーがあります。'EndElement' '
名前空間 'httpmyNapespace' からの SomeMethodResponse は予期されていません。要素 'someNameField' が必要です。
SomeName
Web サービスが使用している XSD の要素です。SomeMethodResponse
これは、 というプライベート フィールドに裏打ちされた型のプロパティでもありますsomeNameField
。DataContractSerializer
プロパティに加えてフィールドを逆シリアル化しようとしているようです。
ディスクから保存した XML をデシリアライズし、SomeMethod が返すのと同じ型のオブジェクトを取得するにはどうすればよいですか?
ありがとう、マトラ