如何在C#中访问嵌套JSON的多组元素?
解决JSON解析遍历问题
你的代码里犯了一个关键错误:原JSON结构中存储合同数据的字段是company,但你在代码里用了assets来取值,这导致后续无法正确获取数据。下面是两种可以正确遍历提取所有目标数据的方法:
方法一:用JToken/JArray直接遍历
// 接收JSON数据 var responseString = await response.Content.ReadAsStringAsync(); // 解析为JArray(因为返回的是数组格式) JArray rootArray = JArray.Parse(responseString); // 获取第一个对象里的company数组 JArray contractList = (JArray)rootArray[0]["company"]; // 遍历所有合同项 foreach (JToken contractItem in contractList) { // 获取contract_ID string contractId = contractItem["contract_ID"].ToString(); // 获取内部company数组里的第一个公司对象 JToken companyInfo = contractItem["company"][0]; // 提取公司信息 string companyName = companyInfo["company_name"].ToString(); string companyLogo = companyInfo["company_logo"].ToString(); string invested = companyInfo["invested"].ToString(); // 输出或处理数据 Debug.Log($"合同ID: {contractId}, 公司名称: {companyName}, Logo: {companyLogo}, 投资金额: {invested}"); }
方法二:用实体类反序列化(更易维护)
先定义对应JSON结构的实体类:
public class RootObject { public string ID { get; set; } public List<ContractItem> company { get; set; } } public class ContractItem { public string contract_ID { get; set; } public List<CompanyInfo> company { get; set; } } public class CompanyInfo { public string company_name { get; set; } public string company_logo { get; set; } public string invested { get; set; } }
然后反序列化并遍历:
// 接收JSON数据 var responseString = await response.Content.ReadAsStringAsync(); // 反序列化到实体类 List<RootObject> rootList = JsonConvert.DeserializeObject<List<RootObject>>(responseString); // 获取第一个根对象里的合同列表 List<ContractItem> contractList = rootList[0].company; // 遍历所有合同 foreach (var contract in contractList) { string contractId = contract.contract_ID; CompanyInfo company = contract.company[0]; Debug.Log($"合同ID: {contractId}, 公司名称: {company.company_name}, Logo: {company.company_logo}, 投资金额: {company.invested}"); }
两种方法都能正确提取所有contract_ID及其关联的公司信息,你可以根据自己的代码习惯选择使用。
内容的提问来源于stack exchange,提问作者LowKeyNerd
相关产品推荐
相关产品推荐

