我在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的一部分)。
知道怎么做吗?
答案 0 :(得分:44)
我认为这可以作为一个起点
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());