2010-02-05 82 views
5

我控制器JSON格式類似這樣的壓扁了MVC結合

return Json(customer); 

返回一個對象圖表視圖在我的JSON對象看起來像這樣

{ 
    Name: 'Joe', 
    Budget: { Amount: 500, Spend: 100 } 
} 

認爲一個複雜的JSON對象,正確映射到我的客戶對象:

public class Customer 
{ 
    public string Name {get;set;} 
    public Budget Budget{get;set;} 
} 

public class Budget 
{ 
    public decimal Amount{get;set;}  
    public decimal Spend{get;set;} 
} 

我想通過相同的JSON對象回anoth

public ActionResult Method(Customer customer) 

當我做這個客戶的名字將會被填充,但不是預算類,我明白爲什麼,因爲ModelBinder的期待是::{名稱:「喬」,「預算與此簽名的控制器上ER方法.Amount':500,'Budget.Spend':100}

所以我必須選擇: 1.我可以按照它想要的格式返回json對象,但是我不知道如何,因爲你可以'噸做到這一點:

return Json(new { Budget.Amount= 500}) 
  • 我可以在客戶端壓扁json對象。有插件或方法來做到這一點?
  • +0

    但你可以做到這一點,對吧?不知道這是否解決了您的整個問題: return Json(new {Budget = new {Amount = 500}}) – RationalGeek 2010-02-05 21:43:09

    +0

    我在嘗試扁平化json對象,以便結果爲'{'Budget.Amount'= 500}' – adriaanp 2010-02-05 21:47:29

    回答

    5

    下面是一個對象轉換爲平散

    function flatten(json){ 
        var nj = {}, 
         walk = function(j){ 
          var jp; 
          for(var prop in j){ 
           jp = j[prop]; 
           if(jp.toString() === "[object Object]"){ 
            walk(jp); 
           }else{ 
            nj[prop] = jp; 
           } 
          } 
         }; 
        walk(json); 
        return nj; 
    } 
    
    +0

    哦,不,你想把json變成哈希? – Mic 2010-02-05 22:03:13

    +1

    是的,它有什麼問題嗎?不好的做法? – adriaanp 2010-02-05 22:30:37

    +0

    您的解決方案將工作,但我將需要有'Budget.Amount'作爲屬性名稱,我目前正在通過將前綴變量傳遞給'走'功能 – adriaanp 2010-02-05 22:33:19

    0

    在我的情況下,我們通過傳遞更多的物體的動作網址解決了它的功能。

    公衆的ActionResult方法(客戶的客戶,[綁定(PREFIX =「預算」)預算預算)

    要做到這一點,你必須扁平化JSON數據以下列方式(你送了它之前,控制器) :

    How to pass complex type using json to ASP.NET MVC controller