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

如何使用Newtonsoft.Json将键值对反序列化为列表?

没问题!我来给你一步步演示怎么用Newtonsoft.Json(也就是大家常说的Json.NET)把你提供的JSON响应里的国家键值对转成列表~

首先先看一下你给出的原始JSON响应:

{ 
    "status": "SUCCESS", 
    "message": "something", 
    "data": { 
        "trade_origin_iso3country": "GBR", 
        "countries": { 
            "ARM ": "Armenia", 
            "BLR": "Belarus ", 
            "DNK": "Denmark", 
            "GBR": "United Kingdom", 
            "MCO": "Monaco" 
        } 
    } 
}

方法一:使用实体类(推荐,类型安全)

这种方式适合需要完整解析整个响应的场景,类型安全,后续维护也更方便。

1. 定义对应结构的实体类

根据JSON的层级结构,我们需要创建三个类来匹配:

// 用来存储单个国家的代码和名称
public class CountryItem
{
    public string Code { get; set; }
    public string Name { get; set; }
}

// 对应JSON里的"data"节点
public class ApiData
{
    public string trade_origin_iso3country { get; set; }
    // 这里用Dictionary来接收countries的键值对
    public Dictionary<string, string> countries { get; set; }
}

// 整个JSON响应的根对象
public class ApiResponse
{
    public string status { get; set; }
    public string message { get; set; }
    public ApiData data { get; set; }
}

2. 反序列化并转换为列表

接下来我们把JSON字符串反序列化为实体对象,再把字典转成我们需要的列表,顺便清理掉键值里的多余空格:

// 你的JSON响应字符串
string jsonResponse = @"
{ 
    ""status"": ""SUCCESS"", 
    ""message"": ""something"", 
    ""data"": { 
        ""trade_origin_iso3country"": ""GBR"", 
        ""countries"": { 
            ""ARM "": ""Armenia"", 
            ""BLR"": ""Belarus "", 
            ""DNK"": ""Denmark"", 
            ""GBR"": ""United Kingdom"", 
            ""MCO"": ""Monaco"" 
        } 
    } 
}";

// 反序列化整个JSON响应
var apiResponse = JsonConvert.DeserializeObject<ApiResponse>(jsonResponse);

// 将countries字典转换为CountryItem列表,同时清理空格
List<CountryItem> countryList = apiResponse.data.countries
    .Select(kv => new CountryItem
    {
        Code = kv.Key.Trim(),
        Name = kv.Value.Trim()
    })
    .ToList();

// 测试输出列表内容
foreach (var country in countryList)
{
    Console.WriteLine($"国家代码:{country.Code},国家名称:{country.Name}");
}

方法二:无实体类的灵活写法

如果只需要提取countries部分,不想定义实体类,可以用JObject直接解析:

string jsonResponse = @"[你的JSON字符串]";

// 用JObject解析JSON
JObject jsonObj = JObject.Parse(jsonResponse);
// 获取countries节点
JObject countriesObj = (JObject)jsonObj["data"]["countries"];

// 转换为列表
List<CountryItem> countryList = countriesObj.Properties()
    .Select(prop => new CountryItem
    {
        Code = prop.Name.Trim(),
        Name = prop.Value.ToString().Trim()
    })
    .ToList();

这种写法更轻便,适合快速提取特定部分的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:28:17