【问题标题】:change json object wrapper name returned from wcf service method更改从 wcf 服务方法返回的 json 对象包装器名称
【发布时间】:2012-09-26 12:49:35
【问题描述】:

我使用名为TestMe 的方法创建了一个 WCF 3.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 是对象名称。有什么办法可以解决这个问题?

【问题讨论】:

    标签: c# asp.net json wcf wcf-binding


    【解决方案1】:

    您可以使用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);
    

    【讨论】:

    • 谢谢,它成功了。但是假设如果我在服务器上出现错误并希望根据条件将消息参数返回为successerror。怎么办?
    【解决方案2】:

    只需删除 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

    【讨论】:

    • 我不想移除包装,但我想改变它。希望你仔细阅读问题
    • 这解决了我的问题,因为它总是将 json 包装在一个似乎称为 /Result 的父对象中。把它放在我的对象上使它工作 [WebInvoke(Method = "GET", UriTemplate = "/{key}/{filter}", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多