use*_*828 9 c# javascriptserializer dynamicobject
我成功地使用MVC3中的JavaScriptSerializer将json字符串反序列化为动态对象.我无法弄清楚的是如何将它投射到我可以列举的东西上.下面的foreach代码行是我最新的attemt,但它错误:"无法将类型'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"))
Run Code Online (Sandbox Code Playgroud)
鉴于您使用'GetEntities'的示例,请尝试将其返回类型更改为IEnumerable<T>(或者,尽管强烈建议不要,至少应该更改IEnumerable<dynamic>).您需要在方法中进行一些过滤,以根据'entityName'输入参数提取适当的实体.虽然,目前还不清楚其他输入参数('entityField')的用途是什么.
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"))
Run Code Online (Sandbox Code Playgroud)