2015-06-10 47 views
0

我需要一個ASP.NET MVC控制器,該控制器從JSON中接收匿名對象以遍歷其屬性。我曾經這樣做,收到Dictionary<string, object>。但現在的一個值是Array和insted的的在ASP.NET MVC控制器中接收嵌套的匿名對象

receivedDictionary[Photos] = [object, object, object]

它得到它作爲

receivedDictionary[Photos[0]] = object, receivedDictionary[Photos[1]] = object, receivedDictionary[Photos[2]] = object

我得到不與主要=照片和值=陣列一個字典條目,但許多鍵=照片[x]和值=對象的條目。

如何將它作爲字典中的一個條目獲取?或者是否有更好的方式將其作爲動態匿名對象並通過其屬性重複實現,就像在JS中一樣?

UPD:JSON看起來像這樣:

{"fields":{"TotalFloors":"9","HouseNumber":"10","Photos":[{"id":0,"ParentID":0,"OriginalUrl":"py4s1y3uyqu","OriginalExt":".jpg","ThumbUrl":"2hn04w2lzuu","FormatUrls":{"WH_109_82_Url":"4cwjarqudvo","WH_766_454_Url":"oofm5qo21rr"}},{"id":0,"ParentID":0,"OriginalUrl":"t3csgq20iro","OriginalExt":".jpg","ThumbUrl":"j1uwwburmse","FormatUrls":{"WH_109_82_Url":"gm4qoery1u2","WH_766_454_Url":"a3c20re3g1d"}}],"Details":"Other details"}} 

控制器定義:

 [HttpPut] 
     public ActionResult restId(string className, int id, Dictionary<string, object> fields) 
     { 
      .... 
     } 
+1

JSON的外觀如何?和創建JSON的代碼?你對這些代碼有控制權嗎? –

+0

你能發佈一個JSON的實際片段嗎? – kaveman

+0

是的,我確實可以控制客戶端代碼。 – Roman

回答

1

(基於該由DefaultModelBinder用於JsonValueProvider似乎處理在奇數的方式排列在該情況下來源here),所以即使是dynamic最有可能有問題。 (不要以爲你必須在MVC 6然而這個問題)

然而,直接調用JavascriptSerializer(這足夠搞笑的是什麼樣的默認提供使用)產生的結果你後:

var js = new JavaScriptSerializer(); 
var res = js.DeserializeObject(@"{'TotalFloors':'9','HouseNumber':'10','Photos':[...],'Details':'Other details'}"); 

爲了解決您的問題,您可以將參數更改爲字符串,並在您的操作中運行上述代碼(顯然用參數替換JSON字符串),這意味着您要從前端提交的JSON需要查看更多像:

// wrapping the JSON object in quotes to stringify it 
{ 'fields' : "{ 'TotalFloors': '9', 'HouseNumber': .... }" } 

否則,您可以執行類似於此處提出的自定義JsonValueProviderhttps://json.codeplex.com/discussions/347099

自定義值提供程序可能是更乾淨的解決方案。

+0

您怎麼可能知道這一點?我的意思是,如果你直接打電話,你會得到需要的結果。這是我希望的答案。謝謝,我現在將JSON作爲字符串傳遞並反序列化您描述的方式。乾杯;) – Roman

+0

再次感謝,男人,一切工作正常,我永遠不會自己搞清楚。 – Roman

+0

很高興我可以幫助:)稱它爲僥倖;我試圖直接複製使用序列化程序,並返回所需的結果。因此,我更深入地瞭解了價值提供者,並找到了我鏈接的代碼。 –

相關問題