0

我有这样的服务:

[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。我怎样才能解决这个问题?

4

1 回答 1

1

您的 JavaScriptdata对象构造不正确 - 它应该是:{ 'person': { 'Name': 'xxxxx' } }

更重要的是,您可以选择其他方式来构建 JavaScript 对象。解决方案(在我看来不太容易出错)是以更标准的方式构建对象(代码更多,但混淆和出错的机会更少 - 特别是如果对象具有高复杂性):

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

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

[WebInvoke(... BodyStyle = WebMessageBodyStyle.Wrapped)]
于 2013-07-10T10:21:04.267 回答