从JSON获取属性名称

时间:2020-03-24 20:38:54

标签: c# json system.text.json

我想像这样用System.Text.Json解析JSON对象:

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

我想确定第一个属性是否命名为使用以下代码的成功或错误:

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

但是以某种方式我无法获得成功属性,最重要的是它的名字。

2 个答案:

答案 0 :(得分:2)

您的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 standard将一个对象定义为一组无序的名称/值对,所以您可能不希望对代码进行硬编码以仅检查第一个属性。以下代码检查第一个对象是否具有所需名称的 any 属性:

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)

演示小提琴here

答案 1 :(得分:0)

也许有帮助

您必须移动该枚举器,(您必须移动该颜色teehveeeeeyyyyy...。)

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,这意味着语言集成查询。试一试。 多数使使用JSONS和C#变得非常方便,等等。

因此通常(除非您要做的是非常特殊的事情),您可以说,每当您手动通过JSON解析并手动遍历枚举器时,就像上面的代码一样,您可能没有利用C#的全部功能及其库。

当它对您有所帮助时,请接受作为答案

迈克,问候