5

TestMe以下に定義する名前のメソッドを使用して、WCF3.5アプリケーションを作成しました。

 [OperationContract]
        [WebInvoke(UriTemplate = "/Login", Method = "POST",
            BodyStyle = WebMessageBodyStyle.Wrapped,
            ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Json)]
        MyDictionary<string, string> TestMe(string param1, string param2);

MyDictionaryこのリンクを使用して作成されます:https ://stackoverflow.com/a/7590189/546033

ここのすべてが正常に動作します。ただし、問題は、以下の実装されたメソッドからデータを返す場合です。

MyDictionary<string, string> success = new MyDictionary<string, string>();
success["desc"] = "Test";
return success;

次のjsonを返します。

{"TestMeResult":{"desc":"Test"}}

私が必要としているのは:

{"success":{"desc":"Test"}}

ここsuccessで、はオブジェクト名です。これの回避策は何ですか?

4

2 に答える 2

7

MessageParameter属性を使用できます。

リクエストおよびレスポンス パラメータ名の名前を制御します。

[OperationContract]
    [WebInvoke(UriTemplate = "/Login", Method = "POST",
        BodyStyle = WebMessageBodyStyle.Wrapped,
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json)] 
    [return: MessageParameter(Name = "success")]
    MyDictionary<string, string> TestMe(string param1, string param2);
于 2012-11-19T19:59:50.800 に答える
4

BodyStyle = WebMessageBodyStyle.Wrapped を削除するだけで、デフォルトは WebMessageBodyStyle.Bare になりますが、自分で明示的に宣言する必要があります。

編集:

JSONを扱っているので、XMLスタイルで機能するため、JSONは役に立ちません。したがって、手順は次のとおりです。

  1. jsonを送信できるように、それを裸で宣言します。
  2. json デシリアライザー (http://msdn.microsoft.com/en-us/library/bb412179.aspx) を使用して独自のラッパーを作成します。

このリンクをチェックして、内部で何が起こっているかを確認することもできます。

http://msdn.microsoft.com/en-us/library/bb412170.aspx

于 2012-10-12T06:46:16.940 に答える