MVC4/.NET4 WebApiコントローラーアクションでJSON文字列を受信しています。アクションのパラメーターはdynamic
です。これは、受信しているJSONオブジェクトについて受信側で何も知らないためです。
_ public dynamic Post(dynamic myobject)
_
JSONは自動的に解析され、結果のdynamic
オブジェクトは_Newtonsoft.Json.Linq.JContainer
_になります。予想どおり、実行時にプロパティを評価できるため、JSONにmyobject.mypropertyなどが含まれている場合は、受信した動的オブジェクトを取得して、C#コード内で_myobject.myproperty
_を呼び出すことができます。ここまでは順調ですね。
次に、ネストされたプロパティを含め、JSONの一部として提供されたすべてのプロパティを反復処理します。ただし、myobject.GetType().GetProperties()
を実行すると、探しているプロパティ(JSONの一部)ではなく、_Newtonsoft.Json.Linq.JContainer
_のプロパティのみが返されます。
これを行う方法はありますか?
これが出発点になると思います
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());