Преобразовать объект / строку JSON в динамический объект C # и получить доступ к свойствам / значениям? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь взять огромный JSON-файл (может быть строкой) и, не зная фактической структуры данных, хочу прочитать и обработать как класс в C #. Я пытался использовать JSON для десериализации, но я не был полностью уверен, куда идти после этого. Я думал об использовании отражений, но не уверен, какие данные мне нужны.

Я попытался десериализовать объект, как показывает код. Но я хочу проверить, если это правильный тип объекта, если это не так, я надеюсь, что это не удастся, но я не могу пройти эту часть. Я также не уверен, что делать с отражениями внутри чека. Я знаю, что должен повторить, но не уверен, какие значения свойств внутри объекта будут содержать то, что мне нужно.

string jsonData = sr.ReadToEnd();
dynamic data = JsonConvert.DeserializeObject(jsonData);
if (data is List<dynamic>)
{
    data.GetType().GetProperties();
}

Мне нужен объект, который имеет все права доступа к данным из файла / строки JSON.

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Я думаю, что одной из ваших проблем является использование JArray вместо List, а также вам нужно привести ваш элемент в JObject. Используйте Newtonsoft.Json и Newtonsoft.Json.Linq, тогда вы можете прочитать свой Json в качестве примера:

string __content = "[ {\"name\": \"person1\" , \"age\": 33} , {\"name\": \"person2\" , \"age\" : 23} ]";

        dynamic data = JsonConvert.DeserializeObject(__content);
        // make sure you have an array of object
        if (data is Newtonsoft.Json.Linq.JArray)
        {
            int i = 0;
            foreach (dynamic item in data)
            {
                // get the property of the object 
                JObject currentitem = item as JObject;
                if (currentitem != null)
                {
                    // access to value of each property
                    foreach (JProperty p in currentitem.Properties())
                    {
                        Console.WriteLine("[" + i + "] : " + p.Name + ":" + p.Value.ToString());
                    }
                    i++;
                }
            }
        }
0 голосов
/ 15 апреля 2019

Вы можете использовать метод DeserializeObject с универсальным типом.Для того, чтобы заверить Тип, которого вы хотите разыграть.Это означает, что ваш код будет следующим:

var data = JsonConvert.DeserializeObject<T>(jsonData);

Где T - класс, который вы хотите проанализировать.Этот метод генерирует исключение в случае, если строку Json невозможно проанализировать в вашем классе.Я думаю, это то, что вы хотите.

...