2014-02-13 22 views
-1

我剛解決了一個最近的問題,Json.Net允許我在將對象序列化到客戶端時包含'類型'的對象。原因是我來回發送的類有一個屬性,它被鍵入爲4個子類的BaseClass。現在最棒的是我的客戶端正在Json上正確顯示每個對象的type屬性。在MVC中使用Json.Net作爲默認格式化程序,而不是API

現在我需要將對象發送回我的控制器,而不是一個API控制器。我已經看到了一堆關於使用Json.Net作爲默認JsonFormatter的api控制器的帖子,但這對於常規的MVC控制器不起作用。

所以我的問題是....我怎麼讓我的控制器默認使用Json.Net串行器?並且...這會對其他可能會發出ajax調用的項目造成問題嗎?

我能夠將我的json作爲字符串發回到我的控制器,然後使用JsonConvert成功反序列化我的對象,所以我知道它可以完成。

任何想法表示讚賞。

編輯: 好了,我跟着指示here改變了JsonValueProviderFactory這似乎是工作,但它沒有幫助原來的問題。

問題是,JsonFormatter仍然是舊的,並沒有使用Json.Net。因此,ProviderFactory正確地構建字典,但是當它試圖反序列化我的對象時,我只能將我的屬性強制轉換爲BaseClass,而不是我期望的派生類。

關於那部分的想法?

編輯: 簡單...如何在MVC4中創建自己的JsonNetMediaTypeFormatter?我已經改變了ProviderFactory,但只改變了每個參數被序列化爲相應值的方式。我需要做的是使用Json.Net,以便將我的作爲層次結構類型的參數序列化爲正確的派生類...不是鍵入爲Baseclass。

編輯 - 最後: 好......所以我沒有驗證,如果我叫ApiController,它映射與正確的子類傳入的參數。所以,我可以走這條路,但我真的很想找到一種方法來與我的常規控制器獲得相同的結果。

回答

0

我有同樣的問題,並通過簡單地覆蓋我的基礎控制器類上的Json方法來解決它。

EX:

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior) 
{ 
    var result = new JsonNetResult 
     { 
      Data = data, 
      ContentEncoding = contentEncoding, 
      JsonRequestBehavior = behavior 
     }; 
    return result; 
} 
+0

感謝您的回答,但我有工作兩種不同的方式。我需要的是將JsonFormatter設置爲調用Controller的默認值,以便它可以反序列化類的層次結構。 –

+0

似乎我誤解了原來的問題,我在想你的問題是序列化數據,沒有收到回來。將傳入數據映射到動作參數的過程是模型綁定,我相信你可以找到足夠的信息與這個答案:http://stackoverflow.com/a/13749124/109456希望它有幫助 –

相關問題