将JSON发送到WCF Rest服务 - 对象字段为空

时间:2012-04-03 11:22:27

标签: javascript wcf

我正在使用WCF Rest服务和post方法,如下所示

[OperationContract]
    [WebInvoke(Method = "POST",
   BodyStyle = WebMessageBodyStyle.Bare,
   RequestFormat = WebMessageFormat.Json,
   ResponseFormat = WebMessageFormat.Json,
   UriTemplate = "/SampleMethod")]
    int SampleMethod(SampleObject sampleObject);

并从Javascript调用此服务,如下所示,

$.ajax({
        type: 'POST',
        url: 'http://localhost/SampleService/SampleService.svc/SampleMethod', 
        data: object,
        contentType: "application/json; charset=utf-8",
        dataType: "json", 
        processdata: true, 
        success: successCallback, //On Successfull service call
        error: serviceFailed// When Service call fails
    });

对象是格式

的格式化json
  

{“sampleObject”:{“ID”:1,“名称”:“ABC”,“数据”:“示例数据”}}

在我尝试使用的示例上方,但在服务端,所有对象字段(ID,Name,Data)均为null。我没有遇到问题。

2 个答案:

答案 0 :(得分:3)

这是将属性设置为null,因为您实际上是一个“包装”对象 - 您发送它的JSON有一个带有属性的对象(sampleObject),它是另一个对象,它是您的SampleObject。

因此,您有两种方法可以解决这个问题。

选项1

您可以将请求格式设置为包含在服务上,因此只需将操作合同的属性更改为以下内容:

[WebInvoke(Method = "POST",    
           BodyStyle = WebMessageBodyStyle.WrappedRequest,
           RequestFormat = WebMessageFormat.Json,    
           ResponseFormat = WebMessageFormat.Json,    
           UriTemplate = "/SampleMethod")] 

选项2

更改字符串化对象的代码,以便它创建此JSON:

{"ID":1, "Name":"ABC", "Data":"Sample data"}

由于你只是发送一个参数,我个人会选择2,因为它可以为你节省一些空间。如果你想发送多个参数,我认为你只需要“包装”样式。

答案 1 :(得分:2)

感谢您的回复。我发现了自己的错误。数据类型不匹配存在问题。像int有一个值空白字符串,也有日期格式的问题。