动态JContainer(JSON.NET)并在运行时迭代属性

我在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()它只返回Newtonsoft.Json.Linq.JContainer的属性而不是我正在寻找的属性(它们是JSON的一部分)。

知道怎么做吗?

我认为这可以作为一个起点

 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>(jObj.ToString());