动态JContainer(JSON.NET)遍历在运行属性(dynamic JContainer (

2019-07-04 08:14发布

我在一家MVC4 / .NET4的WebAPI控制器动作接收一个JSON字符串。 该行动的参数是dynamic ,因为我不知道关于我收到的JSON对象接收端什么。

 public dynamic Post(dynamic myobject)        

的JSON被自动解析和所得dynamic对象是Newtonsoft.Json.Linq.JContainer 。 我能如市场预期,在运行时评估的属性,因此,如果JSON包含类似myobject.myproperty那么我现在可以利用接收到的动态对象,并调用myobject.myproperty的C#代码中。 到现在为止还挺好。

现在我想遍历任何作为的JSON的一部分,包括嵌套属性的所有属性。 但是,如果我这样做myobject.GetType().GetProperties()它只返回的性能Newtonsoft.Json.Linq.JContainer ,而不是我在寻找的属性(即是在JSON的一部分)。

任何想法如何做到这一点?

Answer 1:

我觉得这可能是一个起点

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());


文章来源: dynamic JContainer (JSON.NET) & Iterate over properties at runtime