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

使用C#从给定JSON字符串提取ID的最佳方法?

要在C#里从你提供的JSON中提取ID,这里有几种实用方法,其中强类型序列化是最推荐的方案——毕竟类型安全、可读性强,后续维护也省心:

方法一:强类型序列化(最佳实践)

首先根据JSON的结构,创建对应的C#实体类(字段名可以用C#规范的PascalCase,序列化库会自动匹配JSON的驼峰命名):

public class RootResponse
{
    public int Count { get; set; }
    public List<ProjectItem> Value { get; set; }
}

public class ProjectItem
{
    public int Id { get; set; } // 对应JSON里的value.id
    public string ProjectId { get; set; }
    public string Name { get; set; }
    public PoolInfo Pool { get; set; }
}

public class PoolInfo
{
    public int Id { get; set; } // 对应JSON里的value.pool.id
    public string Scope { get; set; }
    public string Name { get; set; }
    public bool IsHosted { get; set; }
    public string PoolType { get; set; }
}

使用内置的System.Text.Json(.NET Core 3.0+ / .NET 5+)

using System.Text.Json;

// 你的JSON字符串
string json = "{ \"count\":1, \"value\": [ { \"id\":35, \"projectId\": \"frfsdf-039a-405b-8835-5ddb00cfsdf9f107\", \"name\":\"Default\", \"pool\":{ \"id\":1, \"scope\":\"8850710d-4558-4f08-8064-38000a03d209\", \"name\":\"Default\", \"isHosted\":false, \"poolType\":\"automation\" } }] }";

// 反序列化为强类型对象
var response = JsonSerializer.Deserialize<RootResponse>(json);

// 提取需要的ID
int projectItemId = response.Value[0].Id; // 结果:35
int poolId = response.Value[0].Pool.Id; // 结果:1

使用Newtonsoft.Json(Json.NET,兼容旧项目)

如果你的项目还在使用经典的Json.NET,代码几乎一致,只是换序列化方法:

using Newtonsoft.Json;

var response = JsonConvert.DeserializeObject<RootResponse>(json);
int projectItemId = response.Value[0].Id;
int poolId = response.Value[0].Pool.Id;

方法二:动态类型(临时快速提取)

如果只是临时测试或者不想定义实体类,可以用动态类型,但缺点是没有编译时检查,一旦JSON结构变化容易报错:

System.Text.Json 动态方式

using System.Text.Json.Nodes;

var jsonNode = JsonNode.Parse(json);
int projectItemId = jsonNode["value"][0]["id"].GetValue<int>();
int poolId = jsonNode["value"][0]["pool"]["id"].GetValue<int>();

Newtonsoft.Json 动态方式

dynamic jsonObj = JsonConvert.DeserializeObject(json);
int projectItemId = jsonObj.value[0].id;
int poolId = jsonObj.value[0].pool.id;

方法三:直接定位字段(Newtonsoft.Json)

用JObject直接定位到目标字段,适合只提取个别字段的场景:

using Newtonsoft.Json.Linq;

JObject jObj = JObject.Parse(json);
int projectItemId = (int)jObj["value"][0]["id"];
int poolId = (int)jObj["value"][0]["pool"]["id"];

总结

强类型序列化是首选:它能在编译阶段就发现类型不匹配的问题,代码可读性和可维护性远高于动态方法,尤其适合生产环境。动态类型或JObject可以作为临时方案,但不建议在长期维护的项目中大量使用。

内容的提问来源于stack exchange,提问作者doorman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:49:20