You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含动态根名称的JSON转换为C# List

提取动态根节点JSON中的Items数组为C# List的实现方案

你可以通过以下几种常用方式实现,根据项目使用的JSON库选择即可:

一、先定义对应实体类(两种方案通用)

不管用哪种JSON处理库,都需要先定义对应Items条目的实体类,以及必要的嵌套类:

// 对应Items数组中的单个数据条目
public class MeasurementItem
{
    public DateTime Timestamp { get; set; }
    public double Value { get; set; }
    public string UnitsAbbreviation { get; set; }
}

// 对应JSON中的Content节点
public class ApiContent
{
    public List<MeasurementItem> Items { get; set; }
}

// 对应动态GUID节点下的完整响应结构
public class ApiResponse
{
    public int Status { get; set; }
    public Dictionary<string, string> Headers { get; set; }
    public ApiContent Content { get; set; }
}

二、使用Newtonsoft.Json(Json.NET)

如果你的项目引用了Newtonsoft.Json NuGet包,可按以下步骤处理:

using Newtonsoft.Json;
using System.Linq;

// 将JSON字符串反序列化为字典,键为动态GUID字符串
var responseDict = JsonConvert.DeserializeObject<Dictionary<string, ApiResponse>>(stringResult);

// 获取字典中的第一个响应对象(假设根节点仅包含一个GUID条目)
var targetResponse = responseDict.Values.FirstOrDefault();

// 提取Items列表,为空时返回空列表
List<MeasurementItem> itemsList = targetResponse?.Content?.Items ?? new List<MeasurementItem>();

三、使用System.Text.Json(.NET内置)

如果使用.NET Core 3.0+或.NET 5+自带的System.Text.Json,代码如下:

using System.Text.Json;
using System.Linq;

// 反序列化为字典
var responseDict = JsonSerializer.Deserialize<Dictionary<string, ApiResponse>>(stringResult);

// 获取第一个响应对象
var targetResponse = responseDict.Values.FirstOrDefault();

// 提取Items列表
List<MeasurementItem> itemsList = targetResponse?.Content?.Items ?? new List<MeasurementItem>();

四、简化方案(无需完整定义ApiResponse类)

如果不想定义完整的嵌套类,也可以直接解析JSON节点:

用Newtonsoft.Json的JObject

using Newtonsoft.Json.Linq;
using System.Linq;

var jsonObject = JObject.Parse(stringResult);
// 定位到Content下的Items节点
var itemsToken = jsonObject.Values().First()["Content"]["Items"];
// 转换为List
List<MeasurementItem> itemsList = itemsToken.ToObject<List<MeasurementItem>>();

用System.Text.Json的JsonDocument

using System.Text.Json;

using var jsonDoc = JsonDocument.Parse(stringResult);
// 遍历根节点的第一个属性(动态GUID节点)
var rootNode = jsonDoc.RootElement.EnumerateObject().First().Value;
// 定位到Items节点并反序列化
var itemsElement = rootNode.GetProperty("Content").GetProperty("Items");
List<MeasurementItem> itemsList = JsonSerializer.Deserialize<List<MeasurementItem>>(itemsElement);

内容的提问来源于stack exchange,提问作者Priyanka Mane-Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:55:36