讲师中心 微信公众号
AI工具推荐 视频效率加速

C#操作JSON文件 C#如何读取和写入JSON数据

星宇大大_8679

星宇大大_8679

发布时间:2026-03-06 06:07:21

|

942人浏览过

|

来源于php中文网

原创

System.Text.Json 是 .NET Core 3.0+ 和 .NET 5+ 读写 JSON 的首选方案,性能优、内存省;需注意类型匹配、大小写一致、空值处理、路径创建、原子写入、DateTimeZoneHandling 及大文件用 JsonDocument。

c#操作json文件 c#如何读取和写入json数据

用 System.Text.Json 读取 JSON 文件最稳妥

.NET Core 3.0+ 和 .NET 5+ 默认推荐用 System.Text.Json,性能好、内存占用低,且无需额外 NuGet 包。直接调用 JsonSerializer.Deserialize<t>()</t> 即可,但要注意类型必须匹配,否则抛 JsonException。

常见错误现象:JsonException: The JSON value could not be converted to XXX,通常是因为 JSON 字段名大小写不一致、字段缺失或类型错配(比如 JSON 里是字符串,C# 类型却是 int)。

  • 确保目标类的属性名与 JSON 字段名一致,或用 [JsonPropertyName("xxx")] 显式标注
  • 对可能为空的字段,用可空类型(如 int?、string)或设置 JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
  • 读取失败时先用 File.ReadAllText(path) 打印原始 JSON,确认结构是否符合预期

写入 JSON 文件时别漏掉 JsonSerializerOptions.WriteIndented

默认序列化结果是紧凑格式(无换行缩进),不利于人工查看和调试。启用美化输出只需一行配置:

var options = new JsonSerializerOptions { WriteIndented = true };

但要注意:开启 WriteIndented 会略微增加 CPU 和内存开销,高频写入日志类场景建议关闭;而配置文件、调试导出等场景强烈建议打开。

Expanso yaml-to-json
Expanso yaml-to-json

使用 Expanso Edge 管道将 YAML 输入转换为 JSON 格式。

下载
  • 写入前检查对象是否为 null,否则 Serialize 会返回空字符串而非报错
  • 路径不存在时 File.WriteAllText 不会自动创建目录,需提前调用 Directory.CreateDirectory(Path.GetDirectoryName(path))
  • 避免直接覆盖正在被其他进程读取的 JSON 配置文件,可先写临时文件再原子替换

遇到日期格式混乱就改 DateTimeZoneHandling

C# 的 DateTime 默认序列化为 ISO 8601 格式(如 "2024-05-20T09:30:00"),但时区信息容易丢失或误判。如果 JSON 来源是 JavaScript 或其他语言,常出现 "\/Date(1234567890000)\/" 这类格式,System.Text.Json 默认不支持解析。

  • 统一用 DateTimeOffset 替代 DateTime 可保留时区偏移
  • 需要兼容旧格式?得手动预处理字符串,或换用 Newtonsoft.Json(它内置 DateTimeZoneHandling 枚举)
  • 序列化时控制格式:通过 JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()) 等扩展转换器

小文件用 Deserialize<t></t>,大文件或流式场景用 JsonDocument

如果 JSON 文件超过几 MB,或者你只关心其中某几个字段(比如只取 "users[0].name"),全量反序列化成对象会浪费内存。这时该用 JsonDocument.Parse() 解析为只读 DOM 树,按需提取值:

using var doc = JsonDocument.Parse(jsonString);
var name = doc.RootElement.GetProperty("name").GetString();

注意:JsonDocument 必须显式释放(用 using),否则可能引发内存泄漏;它不支持修改,纯读取场景才适用。

  • 无法直接映射到泛型类,适合结构动态、字段不确定的配置解析
  • 嵌套深、层级多时,链式调用 GetProperty() 容易触发 KeyNotFoundException,务必用 TryGetProperty()
  • 从文件读取时,优先用 JsonDocument.Parse(File.OpenRead(path)) 避免一次性加载全部内容到内存

实际项目中,多数配置类场景用 System.Text.Json + 强类型反序列化足够;但只要涉及 JS 互通、复杂日期、或超大 JSON,就得在序列化选项、类型选择和异常兜底上多留一层判断。

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

相关专题

更多
c#是什么意思
c#是什么意思

C#是一种通用的面向对象编程语言,它在.NET框架上运行,可用于开发各种类型的应用程序。本专题为大家提供c#相关的各种文章、以及下载和课程。

1132

2023.08.08

什么是c#
什么是c#

C#(读作C Sharp)是一种现代的、通用的、面向对象的编程语言。它由微软公司开发,于2000年首次发布,主要用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是一种类型安全和托管的编程语言,它结合了C++的强大性能和C语言的简单易学特点,并引入了许多新的特性和概念,如委托、属性、泛型和异步编程等,以提高开发效率和代码可维护性。

3371

2023.08.31

C#中base关键字的用法
C#中base关键字的用法

在C#中,base关键字用于访问当前类的基类成员,这包括基类的字段、属性、方法、构造函数、索引器以及事件。想了解更多C#的相关内容,可以阅读本专题下面的文章。

945

2024.03.13

C#Task用法
C#Task用法

Task在C#中是用于表示异步操作的对象,它位于System.Threading.Tasks命名空间中。想了解更多C#中各种用法的相关内容,可以阅读本专题下面的文章。

2655

2024.03.14

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

352

2026.02.03

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

429

2026.02.06

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

631

2026.03.11

C# Unity游戏开发与ECS架构实践
C# Unity游戏开发与ECS架构实践

本专题聚焦 C# 在 Unity 游戏开发中的应用,系统讲解 ECS(Entity-Component-System)架构设计、游戏对象管理、性能优化与内存控制策略。通过实际游戏案例,帮助开发者构建高性能、结构清晰的游戏系统,提高游戏开发效率与运行性能。

329

2026.04.13

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn