使用复杂类型的WCF服务

时间:2013-07-10 09:47:43

标签: jquery json wcf

我有这样的服务:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "DoWork", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Person DoWork(Person person);
}

服务实施如下:

public class Service : IService
{
    public Person DoWork(Person person)
    {
        //To do required function
        return person;
    }
}

我的Person类型定义是:

 [DataContract]
 public class Person
 {
    [DataMember]
    public string Name { get; set; }       
 }

我尝试使用jQuery来使用此服务:

   var data = { 'person': [{ 'Name': 'xxxxx'}] };

   $.ajax({
            type: "POST", 
            url: URL, // Location of the service
            data: JSON.stringify(data), //Data sent to server
            contentType: "application/json", // content type sent to server
            dataType: "json", //Expected data format from server
            processData: false,
            async: false,
            success: function (response) {                 
            },
            failure: function (xhr, status, error) {                   
                alert(xhr + " " + status + " " + error);
            }
        });

我可以使用此方法调用服务,但服务方法Person的参数(DoWork对象)始终为NULL。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您的JavaScript data对象构造错误 - 应该是:{ 'person': { 'Name': 'xxxxx' } }

此外,您还可以选择构建JavaScript对象的替代方法。解决方案(在我看来不太容易出错)是以更标准的方式构建对象(更多的代码,但更少的机会被混淆并犯错误 - 特别是如果对象具有高复杂性):

var data = new Object();
data.person = new Object();
data.person.Name = "xxxxx";

最后一件事是,您错过了设置发送到服务操作和从服务操作发送的消息的正文样式:

[WebInvoke(... BodyStyle = WebMessageBodyStyle.Wrapped)]