0

MVC 4 用の新しい Web API の使用に切り替えたところですが、Web サービスからの応答を逆シリアル化するのが非常に困難です。

これは私のサーバーコードです:

IEnumerable<Fish> myList = GetFish();

return Request.CreateResponse(HttpStatusCode.OK, myList,"application/xml");

これは次のようにシリアル化されます。

<ArrayOfFish xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.datacontract.org/2004/07/MySolution.NameSpace.Resources\" />

結果が返されないためです。

を使用してこれを解析しようとするとXmlMediaTypeFormatter、取得したものを期待していないというエラーが表示されます。

それを逆シリアル化するための私のコードは、Web API を使い始める前から変更されておらず、単純です:

return content.ReadAsAsync<T>(formatters).Result;

formatters はフォーマッタの 1Listつであり、XmlMediaTypeFormatter

T は、Fish

タイプを省略する"application/xml"と、JSon で送信されているように見えますが (結果は [])、クライアントは xml を予期しており、明示的にタイプをtext/json.

オブジェクトを逆シリアル化するのはかなり簡単なはずです。以前に行っていたのとまったく同じです。汎用バージョンはサポートされなくなったため、サーバーを直接使用する代わりに使用CreateResponseするようにわずかに変更しました。イライラする結果をオブジェクトにデコードする誰かのクライアント/サーバーの例をオンラインで見つけることができません。HttpResponseMessageHttpResponseMessage<T>

何か案は?

4

2 に答える 2

0

Web apiが使用するシリアル化方法が、以前の標準的な方法とは非常にわずかに異なることに気づきました。これを自分に追加するglobal.asaxと、問題が解決しました。

GlobalConfiguration.Configuration.Formatters.Insert(0, new XmlMediaTypeFormatter() { UseXmlSerializer = true });

于 2013-01-02T11:30:54.580 に答える
0

XmlSerializer はインターフェイス (IEnumerable) をシリアル化できません。戻る前にリストに変換します。

return Request.CreateResponse(HttpStatusCode.OK, myList.ToList(),"application/xml");

ここに参照がある同様の質問 - XmlSerializer は IEnumerable をシリアル化しません

于 2013-01-01T23:11:09.447 に答える