5

我创建了一个 WCF 3.5 应用程序,其名称TestMe定义如下:

 [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 样式。所以步骤是:

  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 回答