C#使用Newtonsoft.Json构建复杂JSON结构:从JObject到嵌套数组详解

周末不加班
周末不加班
发布时间:2026-10-15| 3人浏览过
原创

在使用C#开发Web API或处理数据交互时,构造符合规范的JSON字符串至关重要。本文将深入解析如何使用Newtonsoft.Json库中的JObject和JArray类,系统性地处理从简单属性到深层嵌套数据的多种组合场景,确保生成的JSON结构准确无误。

准备工作与环境依赖

上述示例均基于C#语言和 Newtonsoft.Json 类库(NuGet包名相同)。在使用前,请确保项目中已安装该组件并能正确引入 using Newtonsoft.Json.Linq; 命名空间。

第1步:构建基本的JSON对象

最基础的场景是创建一个包含若干键值对的扁平化JSON对象。这在返回单个实体信息(如用户资料)时非常常见。

  1. 目的:生成一个简单的JSON根节点。
  2. 操作:实例化 JObject,通过构造函数直接传入键值对。
	/// <summary>
	/// 生成基础JSON对象
	/// </summary>
	public JObject GetJObject()
	{
		var obj = new JObject {{"Name", "Mark" } };
		return obj;
	}

执行此方法将得到如下JSON结构:

第2步:实现对象内部的层级嵌套

当数据存在归属关系时(例如个人信息中包含联系方式),需要将一个 JObject 作为另一个对象的子元素添加。

  1. 目的:构建包含内嵌对象的结构。
  2. 入口:使用 JObject.Add(string key, object value) 方法。
  3. 重要参数:需定义父对象与子对象的映射键名。
	/// <summary>
	/// 生成包含子对象的JSON
	/// </summary>
	public JObject GetNestedJObject()
	{
		// 1. 定义基本信息
		var obj = new JObject {{"Name", "Mark"}, {"Age", 8 }};
		
		// 2. 定义详细信息对象
		var info = new JObject {{"Phone", "132****7777"}, {"Gender", "男"}};
		
		// 3. 将详细信息添加到基本信息中
		obj.Add("Info", info);
		
		return obj;
	}

生成的JSON结构示意:

第3步:构建基础的JSON数组

当需要返回一组同类对象(如多条记录列表)时,应使用 JArray。

  1. 目的:创建无序的元素集合。
  2. 动作:实例化 JArray 后,逐个调用 Add 方法添加 JObject。
	/// <summary>
	/// 生成基础数组
	/// </summary>
	public JArray GetJArray()
	{
		var jarray = new JArray();
		
		var mark = new JObject { { "Name", "Mark" }, { "Age", 8 } };
		var jack = new JObject { { "Name", "Jack" }, { "Age", 9 } };
		
		jarray.Add(mark);
		jarray.Add(jack);
		
		return jarray;
	}

生成的JSON结构示意:

第4步:对象中包含多个独立数组

在实际业务接口中,常需返回一份主文档,其中包含不同维度的数据数组(例如学生档案及其对应的多科成绩列表)。

  1. 目的:在顶层对象中挂载多个不同类别的数据集。
  2. 参数:分别为不同的业务含义分配Key,如 Student 和 Results。
	/// <summary>
	/// 生成含多个数组的复杂对象
	/// </summary>
	public JObject GetMultipleArrays()
	{
		var obj = new JObject();
		
		// 构建第一个数组:学生信息列表
		var student = new JArray
		{
			new JObject {{ "Name", "Mark" }, { "Age", 8 } },
			new JObject {{ "Name", "Jack" }, { "Age", 9 } }
		};
		
		// 构建第二个数组:成绩详情列表
		var results = new JArray
		{
			new JObject {{ "Subject", "语文"}, { "Score", 100}},
			new JObject {{ "Subject", "数学" }, { "Score", 88}}
		};
		
		// 分别挂载到主对象
		obj.Add("Student", student);
		obj.Add("Results", results);
		
		return obj;
	}

生成的JSON结构示意:

第5步:实现深层嵌套结构(一对多关联)

最复杂的场景通常是将数组嵌套在对象内部,以表达“一个主体对应多项详情”的关系(如一个学生对应其所有科目的分数)。

  1. 目的:实现 JObject → JArray 的深度绑定。
  2. 完成状态:每个学生的对象内部都挂有一个完整的 Results 数组。
	/// <summary>
	/// 生成深层嵌套对象
	/// </summary>
	public JObject GetDeepNest()
	{
		// 1. 创建学生基本信息
		var mark = new JObject { { "Name", "Mark" }, { "Age", "8" } };
		
		// 2. 创建该学生的成绩数组
		var results = new JArray
		{
			new JObject {{ "Subject", "语文"}, { "Score", 100}},
			new JObject {{ "Subject", "数学" }, { "Score", 88}}
		};            
		
		// 3. 将数组添加为学生对象的子节点
		mark.Add("Results", results);
		
		return mark;
	}

生成的JSON结构示意:

总结

在处理API接口数据组装时,灵活运用 JObject 和 JArray 的组合,能够有效应对扁平、嵌套及多层级关联等多样化数据结构需求。熟练掌握这五种常见模式,可显著提升后端开发效率并确保JSON输出的规范性。

以上就是C#使用JArray和JObject封装JSON对象的详细内容,更多关于C# JSON数据处理的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。