从 JSON 获取属性名称
Posted
技术标签:
【中文标题】从 JSON 获取属性名称【英文标题】:Get Property Name from JSON 【发布时间】:2020-03-24 20:38:54 【问题描述】:我想像这样使用 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);
但不知何故,我无法获得成功属性,最重要的是它的名称。
【问题讨论】:
有一个枚举this answer到Converting newtonsoft code to System.Text.Json in .net core 3. what's equivalent of JObject.Parse and JsonProperty中任意对象属性的例子。 【参考方案1】:您的 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.
【讨论】:
【参考方案2】:也许这有帮助
你必须移动那个枚举器,(你必须移动那个颜色 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,它的意思是语言集成查询。试一试。 其中大部分使使用 JSONS 和 C# 非常方便,等等。
所以通常情况下(除非这是一件非常特殊的事情),您可以说,每当您手动解析 JSON 并手动循环遍历枚举器时,就像在上面的代码中一样,您可能没有利用C# 及其库的全部功能。
如果有帮助,请接受作为答案,
你好,迈克
【讨论】:
以上是关于从 JSON 获取属性名称的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC C# - 显示类属性名称而不是 JSON 中的属性名称