Получить имя свойства от JSON - PullRequest
1 голос
/ 24 марта 2020

Я хочу проанализировать JSON объект с System.Text. Json следующим образом:

[{
    "success": {
        "/a/b/c": false
    }
}]

Я хочу узнать, названо ли первое свойство, например, success или error, со следующим код:

using (var document = JsonDocument.Parse(test))
{
  var root = document.RootElement;
  var success = root.EnumerateArray().Current;
  Console.WriteLine(success);
}

но как-то не могу добраться до свойства успеха и самое главное его имени.

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Ваш JSON является массивом объектов, поэтому для получения имени первого свойства в первой записи в массиве вы можете объединить EnumerateArray() и EnumerateObject() вот так:

using var document = JsonDocument.Parse(test);

var names = document.RootElement
    .EnumerateArray()
    .SelectMany(o => o.EnumerateObject())
    .Select(p => p.Name);

var firstName = names.FirstOrDefault();

При этом JSON стандарт определяет объект как неупорядоченный набор пар имя / значение , так что вы можете этого не делать хочу жестко закодировать ваш код, чтобы проверить только первое свойство. Следующий код проверяет, имеет ли первый объект любое свойство с требуемым именем:

var propertyName = "success";

using var document = JsonDocument.Parse(test);

var hasProperty = document.RootElement
    .EnumerateArray()
    .Take(1) // Just the first object
    .Any(o => o.EnumerateObject().Any(p => p.Name == propertyName));

Если вы хотите проверить, имеет ли какой-либо объект в массиве обязательное свойство, удалите .Take(1).

Демонстрационная скрипка здесь .

0 голосов
/ 24 марта 2020

Может быть, это поможет

Вы должны переместить этот счетчик, (вы должны переместить этот цвет teehveeeeeyyy ....)

class Program
{
    static void Main(string[] args)
    {
        string json = "[{\"success\": {\"/a/b/c\": false}}]";
        using (var document = JsonDocument.Parse(json))
        {
            var root = document.RootElement;
            var enumerator = root.EnumerateArray();
            while (enumerator.MoveNext())
            {
                Console.WriteLine($"You are now at array element {enumerator.Current}");

                var elementContentEnumerator = enumerator.Current.EnumerateObject();
                while (elementContentEnumerator.MoveNext())
                {
                    Console.WriteLine($"You are now at property {elementContentEnumerator.Current.Name}");
                }

            }
            Console.ReadLine();
        }
    }
}

Также: Что нужно учитывать при анализе вручную через JSONS

Существует множество мощных JSON платформ, доступных для C#. И есть много вещей, чтобы сделать код более свободно. Особенно LINQ, что означает Language Integrated Query. Попробуй. Большая часть этого делает работу с JSONS и C# действительно удобной и т. Д. c.

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

Пожалуйста, примите в качестве ответа, когда это помогло,

Привет, Майк

...