Json.NET 没有directly提供对属性的整数索引访问JObject https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JObject.htm.
如果你这样做JObject.Parse(jsonString)[0]
你得到一个ArgumentException
与消息
使用无效键值访问的 JObject 值:0。需要对象属性名称。”
Demo #1 here https://dotnetfiddle.net/dZnmhQ.
我怀疑 Json.NET 是这样实现的,因为JSON标准 https://json.org/指出,“安object is an 无序的名称/值对的集合。”
话虽如此,JObject
继承自JContainer https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JContainer.htm这确实明确地 https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Linq/JContainer.cs#L920实施IList<JToken>
。因此,如果你向上转换JObject
to IList<JToken>
您可以通过与文档顺序相对应的整数索引来访问属性:
IList<JToken> obj = JObject.Parse(jsonString);
var firstName = ((JProperty)obj[0]).Name;
演示小提琴#2here https://dotnetfiddle.net/5pn93V.
或者,您可以使用 LINQ 来实现类型安全的解决方案,而无需任何强制转换:
using System;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
var obj = JObject.Parse(jsonString);
var firstName = obj.Properties().Select(p => p.Name).FirstOrDefault();
演示小提琴 #3here https://dotnetfiddle.net/Am7qFA.