Подтвердить что ты не робот

Динамический 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).

Любая идея, как это сделать?

4b9b3361

Ответ 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());