2013-03-22 104 views
0

我想将JSON数据发送到我的WCF服务,但在服务中,我的对象始终为空。我阅读过很多文章,但是我无法解决我的问题。WCF发送JSON,方法中的对象始终为空

[WebInvoke(UriTemplate = "/POST/PersonPost", Method = "POST",BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] 
public Person InsertPerson(Person per) 
{ Debug.WriteLine("InsertPerson"); 
    if (per == null) 
    { 
     return new Person("2", "null"); 
    } 

    Debug.WriteLine("POST:[PersonId = {0} PersonName = {1}]", per.Id, per.Name); 
     return new Person("1", "InsertPerson"); 
    } 

[DataContract] 
    public class Person 
    { 

     public Person(string id, string name) 
     { 
      this.id = id; 
      this.name = name; 
     } 
     [DataMember] 
     public string Id { get; set; } 
     [DataMember]    
     public string Name { get; set; } 

     public override string ToString() 
     { 
      var json = JsonConvert.SerializeObject(this); 
      return json.ToString(); 
     } 
    } 

,在这里我的jQuery:

var person = {}; 
       person.Id = "abc123"; 
       person.Name = "aaaa"; 
       var per = {}; 
       per.per = person; 

       var param = JSON.stringify(per); 


       //param = "{"per":{"Id":"abc123","Name":"aaaa"}}" 

       $.support.cors = true; 

       $.ajax({ 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        data: param, 
        dataType: "json", 
        processData: false, 
        crossDomain: true, 
        url: "http://localhost:59291/Person/POST/PersonPost", 
        success: function (data) { 
         alert("Post erfolgreich: "); 

        }, 
        error: function (xhr, ajaxOptions, thrownError) { 
         alert("Fehler Post: Status " + xhr.status + " AntwortText " + xhr.responseText); 
        } 
       }); 

有什么错?为什么我的参数在insertPerson方法中总是为null。

+0

您的服务和网站是否在同一个域中运行?如果没有,这将是因为这个http://en.wikipedia.org/wiki/Same_origin_policy。您无法通过域发送请求。浏览器不会让你。那么不是没有配置.. – Liam 2013-03-22 14:16:33

+0

没有他们在两个不同的地方运行,但我不能改变这一点。服务器端的方法正在启动,参数只有null。没有办法吗? – Higune 2013-03-22 14:18:27

+0

是我的配置,因此是正确的,我的意思是与我的服务兼容的JSON – Higune 2013-03-22 14:23:04

回答

2

对不起我的英语水平,这个工作对我来说:从JS和WCF REST

var LstPerson = new Array(); 
var person = {}; 

person.Id = 1 
person.name = 'abc' 

LstPerson.push(person) 

var param = JSON.stringify(LstPerson); 

只发送[{ “ABC”, “ID”: “1”, “姓名”}]定义:

[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, 
     RequestFormat=WebMessageFormat.Json, ResponseFormat=WebMessageFormat.Json)] 
public Person InsertPerson(List<Person> per) 
+0

耶稣托雷斯,你是男人! 谢谢你快乐,这段代码正在为我工​​作。 – Higune 2013-03-23 09:17:21

1

这是不工作的原因是因为DataMember s是idname而不是IdName。您需要修改下面的代码:

person.Id = "abc123"; 
person.Name = "aaaa"; 
var per = {}; 
per.per = person; 

person.id = "abc123"; 
person.name = "aaaa"; 
var per = {}; 
per.per = person; 
+0

不,这不起作用。 – Higune 2013-03-22 14:27:12

+0

这是**也**真实! – Liam 2013-03-22 14:29:50

+1

我假设同源。查看其他答案可能无法正常工作的其他原因。 ;) – 2013-03-22 14:30:45

0

试试这个:

var person = {}; 
person.id = "1"; 
person.name = "abc"; 
var param = JSON.stringify(person); 

原因之一,您收到您的申请对象为空,因为该方法期待Person类型的对象。根据您对Person的定义,这在JSON中如下所示。

{"id": "1", "name": "abc"} 

这是因为没有什么里面每个人似的。

Person person = New Person("1", "abc"); 
person.per //There is nothing defined as per inside person.