2015-06-10 44 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

很高兴我可以帮助:)称它为侥幸;我试图直接复制使用序列化程序,并返回所需的结果。因此,我更深入地了解了价值提供者,并找到了我链接的代码。 –

相关问题