2012-11-27 34 views
9

我成功使用MVC3中的JavaScriptSerializer將json字符串反序列化爲動態對象。我無法弄清楚的是如何將它投射到我可以列舉的東西上。下面的代碼行是我最近的嘗試,但它的錯誤:「不能隱式地將類型'System.Dynamic.DynamicObject'轉換爲'System.Collections.IEnumerable'。如何轉換或轉換以便我可以遍歷字典?將類型System.Dynamic.DynamicObject轉換爲System.Collections.IEnumerable

public dynamic GetEntities(string entityName, string entityField) 
     { 
      var serializer = new JavaScriptSerializer(); 
      serializer.RegisterConverters(new[] { new      MyProject.Extensions.JsonExtension.DynamicJsonConverter() }); 
      dynamic data = serializer.Deserialize(json, typeof(object)); 
      return data; 
     } 


foreach (var author in GetEntities("author", "lastname")) 
+2

將它首先投射到IDictionary 。 – user629926

+0

請問您可以發佈json的佈局嗎? – looper

回答

3

Dyn amicObject繼承自IDictionary,因此您可以將其轉換爲IDictionary。

public IDictionary<string, object> GetEntities(string entityName, string entityField) 
    { 
     var serializer = new JavaScriptSerializer(); 
     serializer.RegisterConverters(new[] { new MyProject.Extensions.JsonExtension.DynamicJsonConverter() }); 
     dynamic data = serializer.Deserialize(json, typeof(object)); 
     return data as IDictionary<string, object>; 
    } 




foreach (var author in GetEntities("author", "lastname")) 
7

鑑於你的榜樣「GetEntities」,嘗試改變它的返回類型爲IEnumerable<T>(或者,雖然強烈不推薦,至少IEnumerable<dynamic>),你需要做的方法中的一些過濾提取的使用基於'entityName'輸入參數的適當實體儘管目前還不清楚其他輸入參數('entityField')的用途是什麼,但尚不清楚。