如何在C# WinForm中用JSON.Net解析嵌套JSON字符串并提取指定值
用JSON.Net解析嵌套JSON到独立变量的实现(C# WinForms)
没问题,用JSON.Net(Newtonsoft.Json)来处理这个混合类型的嵌套JSON完全可行,我给你两种常用的实现方式,按需选择:
第一步:先安装JSON.Net包
首先得确保你的项目里已经安装了Newtonsoft.Json,可以通过NuGet包管理器安装:
- 右键项目 → 管理NuGet程序包
- 搜索
Newtonsoft.Json并安装
方式一:用动态类型(快速实现,适合简单场景)
这种方式不需要提前定义类,直接动态解析,代码简洁:
using Newtonsoft.Json; using Newtonsoft.Json.Linq; // 注意:原JSON的单引号要换成标准双引号,或者先替换处理 string jsonDemo = @"{""status"":""OK"",""articles"":[{""key1"":""value""},""Maqbool""]}"; // 如果原字符串是单引号格式,先做替换:jsonDemo = jsonDemo.Replace("'", "\""); // 解析JSON dynamic jsonObj = JsonConvert.DeserializeObject<dynamic>(jsonDemo); // 提取status到独立变量 string status = jsonObj.status; // 处理articles数组(混合类型:对象+字符串) JArray articlesArray = jsonObj.articles; // 提取key1的值 string key1Value = articlesArray[0].key1; // 提取articles里的字符串项 string articleStringItem = articlesArray[1].ToString(); // 现在你就可以用这三个变量status、key1Value、articleStringItem了
方式二:用强类型类(更规范,适合大型项目)
如果你的项目需要更严谨的类型检查,建议定义对应的数据类来解析:
using Newtonsoft.Json; using Newtonsoft.Json.Linq; // 定义对应的实体类 public class ArticleObject { public string key1 { get; set; } } public class RootJson { public string status { get; set; } public JArray articles { get; set; } // 因为是混合类型数组,用JArray接收 } // 同样先处理JSON字符串格式 string jsonDemo = @"{""status"":""OK"",""articles"":[{""key1"":""value""},""Maqbool""]}"; // 解析到强类型对象 RootJson rootObj = JsonConvert.DeserializeObject<RootJson>(jsonDemo); // 提取各个变量 string status = rootObj.status; ArticleObject firstArticle = rootObj.articles[0].ToObject<ArticleObject>(); string key1Value = firstArticle.key1; string articleStringItem = rootObj.articles[1].ToString();
注意点
- 一定要保证JSON格式是标准的,原示例里的单引号需要替换成双引号,否则解析会报错
- 如果articles数组的类型固定,也可以调整实体类的定义,但这里因为是混合类型,用JArray是最灵活的处理方式
内容的提问来源于stack exchange,提问作者user5058807
相关产品推荐
相关产品推荐

