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

在C#中解析非数组结构JSON的最佳实现方案咨询

在C#中解析非数组结构JSON的最佳实现方案咨询

嘿,我来帮你搞定这个JSON解析的问题!你拿到的这个JSON结构比较特殊——services下面是嵌套的键值对对象,不是常规的数组,所以得用适配这种动态键的方式来处理,下面给你两种在C#里最常用的靠谱方案:


方案一:用.NET自带的System.Text.Json(无需额外安装包)

这种方案适合用.NET Core 3.0+或者.NET 5+的项目,不用装第三方库,直接用官方提供的序列化工具就行。我们可以通过字典类型来接收那些动态的键(比如Homecall、Two Day这些):

首先定义对应的实体类:

// 用来接收每个服务的ID
public class ServiceItem
{
    public string Id { get; set; }
}

// 最外层的容器类,用字典来接收services下的动态分类(比如这里的Home)
public class ServicesContainer
{
    public Dictionary<string, Dictionary<string, ServiceItem>> Services { get; set; }
}

然后编写解析代码:

// 你的原始JSON字符串
string json = @"{""services"":{""Home"":{""Homecall"":{""id"":""10""},""Two Day"":{""id"":""11""},""Three Day"":{""id"":""12""}}}}";

// 反序列化JSON到我们定义的类里
var parsedResult = JsonSerializer.Deserialize<ServicesContainer>(json);

// 提取Home这个分类以及下面的所有服务
if (parsedResult.Services.TryGetValue("Home", out var homeServices))
{
    // 这里的homeCategory就是你要的独立变量啦
    string homeCategory = "Home";
    Console.WriteLine($"分类名称:{homeCategory}");
    
    // 遍历Home下的每个服务,输出名称和ID
    foreach (var (serviceName, serviceDetails) in homeServices)
    {
        Console.WriteLine($"服务:{serviceName},ID:{serviceDetails.Id}");
    }
}

方案二:用Newtonsoft.Json(Json.NET,经典第三方库)

如果你的项目还在使用.NET Framework,或者习惯用Json.NET,那可以用这种更灵活的动态解析方式,甚至不用提前定义实体类:

// 你的原始JSON字符串
string json = @"{""services"":{""Home"":{""Homecall"":{""id"":""10""},""Two Day"":{""id"":""11""},""Three Day"":{""id"":""12""}}}}";

// 直接解析成JObject动态对象
JObject jsonObj = JObject.Parse(json);

// 获取Home对应的节点
JToken homeNode = jsonObj["services"]["Home"];
string homeCategory = "Home";
Console.WriteLine($"分类名称:{homeCategory}");

// 遍历Home下的所有服务属性
foreach (JProperty serviceProp in homeNode.Children<JProperty>())
{
    string serviceName = serviceProp.Name;
    string serviceId = serviceProp.Value["id"].ToString();
    Console.WriteLine($"服务:{serviceName},ID:{serviceId}");
}

小提示

如果你的JSON里除了Home还可能有其他分类(比如Office、Shop),用字典的方式会自动适配所有分类,不用修改代码;如果结构完全固定,也可以把Home定义成类的固定属性,但显然你需要动态获取这些键,所以字典是最适合的选择。

备注:内容来源于stack exchange,提问作者PMG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:47:53