2014-04-14 97 views
1

我從客戶端發送JSON對象,但是當我得到我的模型時,所有屬性都使用默認值綁定。MVC 4通過POST數據發送json對象

我嘗試一些方法,例如我得到的數據作爲字符串,但沒有結果我的預期。 那麼我該如何解決這個問題?

的Web API配置

public static void Register(HttpConfiguration config) 
{ 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 

    var json = config.Formatters.JsonFormatter; 
    json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; 
    config.Formatters.Remove(config.Formatters.XmlFormatter); 
} 

型號

[Serializable] 
public class WorkerPuantaj 
{ 
    public int workT { get; set; } 
    public int PDay { get; set; } 
    public int PMonth { get; set; } 
    public int PYear { get; set; } 
    public int worker { get; set; } 
} 

客戶端請求

$.ajax({ 
     url: "/api/BuildingApi/AddPuantajItems", 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     type: 'POST', 
     data: JSON.stringify(jsonData), 
     success: function (data) { 
      alert("oldu"); 
     }, 
     error: function (a, b, c) { 
      alert("olmadı"); 
     } 
    }); 

JSON正在發送

「[{」 workT 「:1,」 PDAY 「:20,」 PMonth 「:4」,PYear 「:2014,」 工人 「:3},{」 workT「: 2, 「PDAY」:21, 「PMonth」:4 「PYear」:2014, 「工人」:3},{ 「workT」:3 「PDAY」:22, 「PMonth」:4「,PYear 「:2014年, 「工人」:3}]

Debugger Display

+0

現在不可能回答這個問題。你發送給服務器的實際數據是什麼樣的?你的服務器端方法是什麼樣的? –

+0

你可以看到有問題,所以我發送了「[{」workT「:1,」PDay「:20,」PMonth「:4,」PYear「:2014,」worker「:3},{」workT「:2 「PDAY」:21, 「PMonth」:4 「PYear」:2014, 「工人」:3},{ 「workT」:3 「PDAY」:22, 「PMonth」:4 「PYear」:2014 ,「worker」:3}]「 – acebisli

+0

我在反序列化JSON時遇到過類似於此的問題。嘗試將'AddPuantajItems'的方法參數聲明爲'List '而不是'WorkerPuantaj []'。 –

回答

1

既然你要發送的數據作爲JSON陣列,在方法 「AddPuantajItems」 你應該有你的參數作爲WorkerPuantaj [],但它不是你有問題的原因。

如果您在MVC Web API模型上使用Serializeable屬性,則無法將傳入的JSON數據反序列化爲您的模型類型。我不知道原因,但它解決了我的測試案例的問題。

刪除[Serializable]關鍵字,讓我知道它是否已被修復。

+0

真的很感謝你兄弟:) – acebisli