我试图找到有关如何通过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;
},
由于
答案 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"开头。当它穿过电线时。