1

我想使用的WebAPIJSON反序列化問題與PUT請求的Web API

我有一個控制器執行操作

AdminController類

[HttpPut] 
     [Route("newprofile")] 
     public HttpResponseMessage Update(AdminAction adminAction) 
     { 
      if (_adminManager.ApproveUser(adminAction)) 
      { 
       return Request.CreateResponse(HttpStatusCode.OK); 
      } 
      return Request.CreateResponse(HttpStatusCode.BadRequest); 
     } 
的資源來執行更新

資源

public class AdminAction : BaseResource 
    { 
    public bool Approve { get; set; } 

    public bool Delete { get; set; } 

    public string EmailId { get; set; } 

    public string Language { get; set; } 

    [IgnoreDataMember] 
    public Language eLanguage { get; set; } 
    } 

Ajax代碼

activate: function (e) { 

     var email = this.model.get('Email'); 

     var adminAction = { 
      "Approve": true, 
      "Delete": false, 
      "EmailId": email, 
      "Language": $("#ddlMotherTongue").val() 
     } 

     var url = kf.Settings.apiUrl() + '/admin/newprofile'; 

     $.ajax(url, { 
      type: "put", 
      data: JSON.stringify(adminAction), 
      success: function (data, textStatus, jqXHR) { 
       alert('Profile approved'); 
       $("table tr td").filter(function() { 
        return $(this).text().trim() == email; 
       }).parent('tr').css({'border': '1px solid green', 'border-left': 'none', 'border-right': 'none','color':'green'}); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       if (jqXHR.status == 400) { 
        var errorJson = jQuery.parseJSON(jqXHR.responseText); 
        if (errorJson.hasOwnProperty("Errors")) { 
         switch (errorJson.Errors[0].ErrorType) { 
         } 
        } 
       } 
      }, 
      async: true 
     }); 
     return false; 
    }, 

提琴手

網址:http://lapi.x.com/admin/newprofile

請求頭

Accept: application/json 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 
Authorization: Token dd39c761-3060-498b-9393-92b12cace238 
Connection: keep-alive 
Content-Length: 76 
Content-Type: application/json 
Host: lapi.x.com 
Origin: http://x.com 
Referer: http://x.com/ 

身體

{"Approve":true,"Delete":false,"EmailId":"[email protected]","Language":"Hindi"} 

當我執行put操作(提琴手和代碼)在put方法收到的管理對象(代碼後面)已設置爲默認值的對象的所有類型,即通過值沒有反序列化。

關於我能做些什麼JSON的任何想法,服務器不喜歡它?

+1

嘗試增加'[數據成員]'上的構件中的一個,並且還'[DataContract]'上的類'AdminAction'。還有哪個WebAPI使用1或2?你使用的是Json.NET還是DataContractJsonSerializer? –

+0

我將我的項目從OpenRasta遷移到WebApi,這個Api在OpenRasta中工作,所以我忽略了這些屬性。 – sham

回答

1

因爲您正在使用DataContractJsonSerializer您應該添加相關屬性。

階級屬性:

[DataContract] 

方法屬性:

[DataMember]