dynamic JContainer (JSON.NET) & Cyclate over Runtime



我在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<Dictionary<string, object>>(jObj.ToString());

相关内容

  • 没有找到相关文章

最新更新