2012-11-27 12 views
9

MVC3のJavaScriptSerializerを使用してjson文字列を動的オブジェクトに逆シリアル化することに成功しました。私が理解できないことは、それを私が列挙できるものにキャストする方法です。以下のforeach行は最新のものですが、「System.Dynamic.DynamicObject 'を' System.Collections.IEnumerable 'に暗黙的に変換することはできません。どのようにして変換またはキャストして辞書を反復処理できますか「GETENTITIES」のご使用例を考えると?型 '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

(強く推奨されていないが、少なくともIEnumerable<dynamic>、または)、IEnumerable<T>にその戻り値の型を変更してみてください。あなたは、抽出するための方法の中に、いくつかのフィルタリングを行う必要があります'entityName'入力パラメータに基づいて適切なエンティティが使用されますが、意図した用途が他の入力パラメータ( 'entityField')にどのような用途であるかは不明です。

関連する問題