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 に答える