Search code examples
c#javascriptserializerdynamicobject

Convert type 'System.Dynamic.DynamicObject to System.Collections.IEnumerable


I'm successfully using the JavaScriptSerializer in MVC3 to de-serialize a json string in to a dynamic object. What I can't figure out is how to cast it to something I can enumerate over. The foreach line of code below is my latest attemt but it errors with: "Cannot implicitly convert type 'System.Dynamic.DynamicObject' to 'System.Collections.IEnumerable'. How can I convert or cast so that I can iterate through the dictionary?

 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"))

Solution

  • DynamicObject is inherited from IDictionary, so you can cast it to 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"))