21

MVC4 /.NET4WebApiコントローラーアクションでJSON文字列を受信して​​います。アクションのパラメーターはdynamic、受信側で受信しているJSONオブジェクトについて何も知らないためです。

 public dynamic Post(dynamic myobject)        

JSONは自動的に解析され、結果のdynamicオブジェクトはNewtonsoft.Json.Linq.JContainerです。予想どおり、実行時にプロパティを評価できるため、JSONにmyobject.mypropertyのようなものが含まれている場合は、受信した動的オブジェクトを取得しmyobject.mypropertyてC#コード内で呼び出すことができます。ここまでは順調ですね。

ここで、ネストされたプロパティを含め、JSONの一部として提供されたすべてのプロパティを繰り返し処理したいと思います。ただし、これを行うと、探しているプロパティ(JSONの一部である)ではなく、のプロパティmyobject.GetType().GetProperties()のみが返されます。Newtonsoft.Json.Linq.JContainer

これを行う方法はありますか?

4

1 に答える 1

49

これが出発点になると思います

dynamic dynObj = JsonConvert.DeserializeObject("{a:1,b:2}");

//JContainer is the base class
var jObj = (JObject)dynObj;

foreach (JToken token in jObj.Children())
{
    if (token is JProperty)
    {
        var prop = token as JProperty;
        Console.WriteLine("{0}={1}", prop.Name, prop.Value);
    }
}

編集

これもあなたを助けるかもしれません

var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(jObj.ToString());
于 2012-11-30T20:58:20.987 に答える