Динамический JContainer (JSON.NET) & Итерация над свойствами во время выполнения
Я получаю строку JSON в действии контроллера MVC4/.NET4 WebApi. Параметр действия dynamic
, потому что я ничего не знаю на принимающей стороне о объекте JSON, который я получаю.
public dynamic Post(dynamic myobject)
JSON автоматически анализируется, и полученный объект dynamic
является Newtonsoft.Json.Linq.JContainer
. Я могу, как и ожидалось, оценивать свойства во время выполнения, поэтому, если JSON содержит что-то вроде myobject.myproperty, тогда я могу теперь взять полученный динамический объект и вызвать myobject.myproperty
внутри кода С#. Пока все хорошо.
Теперь я хочу перебрать все свойства, которые были предоставлены как часть JSON, включая вложенные свойства. Однако, если я делаю myobject.GetType().GetProperties()
, он возвращает свойства Newtonsoft.Json.Linq.JContainer
вместо свойств, которые я ищу (которые были частью JSON).
Любая идея, как это сделать?
Ответы
Ответ 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());