跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp JSON 处理
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C# JSON处理 = JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。在C#中,处理JSON数据是常见的任务,特别是在Web API、配置文件和数据存储等场景中。本文将详细介绍如何在C#中处理JSON数据,包括序列化、反序列化以及使用流行库(如Newtonsoft.Json和System.Text.Json)的方法。 == 介绍 == JSON是一种基于文本的格式,使用键值对表示数据。它通常用于客户端和服务器之间的数据传输,或存储配置信息。C#提供了多种方式来处理JSON数据,包括内置的`System.Text.Json`库和第三方库`Newtonsoft.Json`(也称为Json.NET)。 JSON示例: <syntaxhighlight lang="json"> { "name": "John Doe", "age": 30, "isStudent": false, "courses": ["Math", "Science", "History"] } </syntaxhighlight> 在C#中,JSON数据可以映射到对象或集合,反之亦然。这种转换称为序列化(将对象转为JSON)和反序列化(将JSON转为对象)。 == 使用System.Text.Json == `System.Text.Json`是.NET Core 3.0及更高版本中内置的JSON处理库,性能较高且无需安装额外依赖。 === 反序列化JSON === 将JSON字符串转换为C#对象: <syntaxhighlight lang="csharp"> using System; using System.Text.Json; public class Person { public string Name { get; set; } public int Age { get; set; } public bool IsStudent { get; set; } public string[] Courses { get; set; } } string json = @"{ ""name"": ""John Doe"", ""age"": 30, ""isStudent"": false, ""courses"": [""Math"", ""Science"", ""History""] }"; Person person = JsonSerializer.Deserialize<Person>(json); Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); </syntaxhighlight> 输出: <syntaxhighlight lang="text"> Name: John Doe, Age: 30 </syntaxhighlight> === 序列化为JSON === 将C#对象转换为JSON字符串: <syntaxhighlight lang="csharp"> Person person = new Person { Name = "Jane Smith", Age = 25, IsStudent = true, Courses = new[] { "Art", "Music" } }; string json = JsonSerializer.Serialize(person); Console.WriteLine(json); </syntaxhighlight> 输出: <syntaxhighlight lang="json"> {"Name":"Jane Smith","Age":25,"IsStudent":true,"Courses":["Art","Music"]} </syntaxhighlight> === 自定义序列化选项 === 可以通过`JsonSerializerOptions`自定义序列化行为,例如格式化输出或忽略空值: <syntaxhighlight lang="csharp"> var options = new JsonSerializerOptions { WriteIndented = true, IgnoreNullValues = true }; string json = JsonSerializer.Serialize(person, options); Console.WriteLine(json); </syntaxhighlight> 输出: <syntaxhighlight lang="json"> { "Name": "Jane Smith", "Age": 25, "IsStudent": true, "Courses": ["Art", "Music"] } </syntaxhighlight> == 使用Newtonsoft.Json == `Newtonsoft.Json`是一个流行的第三方库,功能丰富且兼容性广。 === 安装 === 通过NuGet安装: <syntaxhighlight lang="bash"> Install-Package Newtonsoft.Json </syntaxhighlight> === 反序列化JSON === <syntaxhighlight lang="csharp"> using Newtonsoft.Json; string json = @"{ 'name': 'John Doe', 'age': 30, 'isStudent': false, 'courses': ['Math', 'Science', 'History'] }"; Person person = JsonConvert.DeserializeObject<Person>(json); Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); </syntaxhighlight> === 序列化为JSON === <syntaxhighlight lang="csharp"> Person person = new Person { Name = "Jane Smith", Age = 25, IsStudent = true, Courses = new[] { "Art", "Music" } }; string json = JsonConvert.SerializeObject(person, Formatting.Indented); Console.WriteLine(json); </syntaxhighlight> 输出: <syntaxhighlight lang="json"> { "Name": "Jane Smith", "Age": 25, "IsStudent": true, "Courses": ["Art", "Music"] } </syntaxhighlight> === 高级特性 === Newtonsoft.Json支持更多高级特性,如自定义转换器、动态对象处理和条件序列化: <syntaxhighlight lang="csharp"> var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.Indented }; string json = JsonConvert.SerializeObject(person, settings); </syntaxhighlight> == 实际应用案例 == === 从API读取JSON数据 === 以下示例展示如何从Web API获取JSON数据并反序列化为对象: <syntaxhighlight lang="csharp"> using System.Net.Http; using System.Threading.Tasks; public async Task<Person> GetPersonAsync(string url) { using (HttpClient client = new HttpClient()) { string json = await client.GetStringAsync(url); return JsonSerializer.Deserialize<Person>(json); } } </syntaxhighlight> === 配置文件处理 === JSON常用于存储应用程序配置: <syntaxhighlight lang="csharp"> public class AppConfig { public string LogPath { get; set; } public int MaxRetries { get; set; } } string configJson = File.ReadAllText("config.json"); AppConfig config = JsonSerializer.Deserialize<AppConfig>(configJson); </syntaxhighlight> == 性能比较 == `System.Text.Json`通常比`Newtonsoft.Json`更快且内存效率更高,但后者功能更丰富。以下是一个简单的性能对比: <mermaid> barChart title 序列化性能比较(毫秒) x-axis Library y-axis Time series "1000次序列化" System.Text.Json: 120 Newtonsoft.Json: 180 </mermaid> == 总结 == JSON处理是C#开发中的核心技能之一。本文介绍了两种主要方法: 1. **System.Text.Json**:高性能,内置支持,适合新项目。 2. **Newtonsoft.Json**:功能丰富,兼容性强,适合需要高级特性的场景。 根据项目需求选择合适的库,并合理使用序列化和反序列化技术。 [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp 文件处理]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)