2013-03-22 105 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.