1

クライアントから渡されたパラメーターを指定して、メソッドの WebResponseFormat を動的に変更する方法はありますか? WebResponseFormat をデフォルトで XML に設定していますが、クライアントに形式を JSON または XML として指定できるようにしたいと考えています。何も指定されていない場合は、デフォルトで XML を使用します。

現在、私は次のことを行っています:

[WebGet(UriTemplate = "objects", BodyStyle = WebMessageBodyStyle.Bare)]
[OperationContract]
List<SampleObject> GetObjects();

ユーザーは次の方法で呼び出すことができます。

http://localhost/rest/myservice/objects

次に、次のようにしてフォーマットを指定できます。

http://localhost/rest/myservice/objects?format=json

問題は、次の方法で応答コンテンツ タイプを設定しようとしたときです。

WebOperationContext.Current.OutgoingResponse.ContentType = "application/json";

これは XML を返すだけですが、ブラウザーは応答を JSON としてシリアル化するのではなく、JSON オブジェクトのように処理しようとします。

Stream を戻り値として使用し、応答を自分でシリアル化する以外に、.NET 3.5 でもこれは可能ですか? そうでない場合、より良い解決策はありますか?

4

2 に答える 2

1

以下を実行することでこれを解決できました。

[WebGet(UriTemplate = "objects", BodyStyle = WebMessageBodyStyle.Bare)]
[OperationContract]
List<SampleObject> GetObjects();

[WebGet(UriTemplate = "objects?format=json", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
List<SampleObject> GetObjectsInJson();

きれいではありませんが、format=xml が定義されているか、省略されている場合は、デフォルトで私の操作コントラクトになりますが、format=json が定義されている場合は、デフォルトで 2 番目の操作コントラクトになります。これにより、必要に応じて結果が JSON および XML として正常に返されます。

于 2010-04-01T14:40:33.817 に答える
0

.NET 3.5 と WCF REST 3.5 の場合、これをエレガントに行う方法がわかりません。

.NET 4 および .NET 4 の WCF REST は、使用する「コンテンツ ネゴシエーション」戦略をサポートします。設定するだけでContentType = "application/json"、サービスは XML ではなく JSON を自動的に返すようになります。

したがって、機会があれば、.NET 4 (2010 年 4 月中旬にリリース予定) を待ち、それを使用してください。いずれにせよ、WCF、特に WCF REST 領域で多くの改善が提供されるはずです。

于 2010-03-30T16:03:01.063 に答える