如何修改wcf服务方法的json结果的名称

时间:2014-04-09 15:23:39

标签: c# asp.net json wcf

我试图找到有关如何通过ajax调用修改从wcf服务返回的对象名称(通过ajax调用)而不是使用默认包装器的信息。我没有运气搜索相关文章。似乎结果的默认包装器名称是MethodNameResult,我希望它是来自多种方法的GenericResponse。

我的合同:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
[WcfSerialization::DataContract(Name = "MyServiceResponse")]

public class MyServiceResponse : object
{

    public MyServiceResponse()
    {            
    }

    [WcfSerialization::DataMember(Name = "Success", IsRequired = true, Order = 0)]
    public bool Success { get; set; }

    [WcfSerialization::DataMember(Name = "ErrorMessage", IsRequired = true, Order = 1)]
    public string ErrorMessage { get; set; }  


}

我的界面:

    [OperationContract()]        
    [WebInvoke(Method = "POST", 
        UriTemplate = "MyMethod", 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat=WebMessageFormat.Json
    )]
    MyServiceResponse MyMethod(MyRequest requestData); 

    [OperationContract()]        
    [WebInvoke(Method = "POST", 
        UriTemplate = "MyMethod2", 
        BodyStyle = WebMessageBodyStyle.Wrapped, 
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat=WebMessageFormat.Json
    )]
    MyServiceResponse MyMethod2(MyRequest requestData); 

我希望,因为我用名称" MyServiceResult"来装饰方法结果的数据合同。那么这将是生成的json对象的名称,而是为每个方法请求获取不同的名称。例如,而不是:

{"MyServiceResponse":{"Success":true,"ErrorMessage":""}}

通过电线,我得到了:

{"Method1Result":{"Success":true,"ErrorMessage":""}}

{"Method2Result":{"Success":true,"ErrorMessage":""}}

这阻止了客户端对结果进行通用检查,如

中的情况
success: function (returnData, textStatus, xhr) {
            result.success = returnData.MyServiceResponse.Success;
            result.errorMessage = returnData.errorMessage;
},

由于

2 个答案:

答案 0 :(得分:4)

您可以向方法添加指定包装器名称的附加属性:

[return: MessageParameter(Name = "MyServiceResponse")]

有关JSON REST格式的详细信息,请参阅RESTful web service body format问题。

答案 1 :(得分:0)

尝试将UriTemplate设置为以下设置...

UriTemplate = "MyServiceResponse"

...并将您的回复编辑为此...

public class MyServiceResponse
{ 
    public bool Success { get; set; }
    public string ErrorMessage { get; set; }  
}

您正在为SOAP指定序列化并添加C#将为您处理的大量内容,例如,您的类的默认构造函数。这样您就可以指定您希望服务返回一个干净的JSON对象,该字符串将以" MyServiceResponse"开头。当它穿过电线时。