21

我在 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 的一部分)。

知道怎么做吗?

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 回答