10

我成功地使用 MVC3 中的 JavaScriptSerializer 将 json 字符串反序列化为动态对象。我不知道如何将它转换为我可以枚举的东西。下面的 foreach 代码行是我的最新尝试,但它错误:“无法将类型'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"))
4

2 回答 2

7

鉴于您对“GetEntities”的示例用法,请尝试将其返回类型更改为IEnumerable<T>(或者,尽管强烈不推荐,但至少为IEnumerable<dynamic>)。您需要在方法中进行一些过滤,以根据“entityName”输入参数提取适当的实体。虽然,尚不清楚其他输入参数('entityField')的预期用途是什么。

于 2012-11-29T10:55:48.963 回答
3

DynamicObject 继承自 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"))
于 2012-11-29T20:50:31.787 回答