C#如何优雅地将一个C#对象序列化为JSON文件

来源:网络学院作者:宋琮安头衔:草根站长
导读:本期聚焦于小伙伴创作的《C#如何优雅地将一个C#对象序列化为JSON文件》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何优雅地将一个C#对象序列化为JSON文件》有用,将其分享出去将是对创作者最好的鼓励。

在C#项目里,把业务对象持久化成JSON文件是一项基础但重要的能力。借助官方类库,我们可以用很少的代码就完成这件事,并且保证可读性与稳定性。

使用System.Text.Json完成基础序列化

System.Text.Json是.NET内置的JSON处理库,无需安装Newtonsoft.Json即可使用。下面定义一个简单的数据模型,并将其写入本地文件。

using System;
using System.IO;
using System.Text.Json;

// 定义待序列化的对象
public class UserProfile
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

class Program
{
    static void Main()
    {
        // 创建对象实例
        var user = new UserProfile
        {
            Name = "张三",
            Age = 28,
            Email = "test@ipipp.com"
        };

        // 设置序列化选项,缩进格式更美观
        var options = new JsonSerializerOptions
        {
            WriteIndented = true,
            Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
        };

        // 序列化为JSON字符串
        string json = JsonSerializer.Serialize(user, options);

        // 写入文件,默认编码即可处理中文
        File.WriteAllText("user.json", json);

        Console.WriteLine("对象已写入JSON文件");
    }
}

采用异步方式提升健壮性

在Web应用或桌面程序中,文件写入最好使用异步方法,避免阻塞主线程。File.WriteAllTextAsync配合序列化后的字符串即可实现。

using System;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;

public class Config
{
    public string AppName { get; set; }
    public bool Enabled { get; set; }
}

class Demo
{
    static async Task SaveAsync()
    {
        var cfg = new Config { AppName = "示例程序", Enabled = true };
        var json = JsonSerializer.Serialize(cfg, new JsonSerializerOptions { WriteIndented = true });

        // 异步写入文件
        await File.WriteAllTextAsync("config.json", json);
    }
}

直接序列化到流

如果数据较大,直接序列化到FileStream能减少一次字符串中转,更加高效。

using System;
using System.IO;
using System.Text.Json;

public class LogEntry
{
    public DateTime Time { get; set; }
    public string Message { get; set; }
}

class StreamDemo
{
    static void SaveToStream()
    {
        var log = new LogEntry { Time = DateTime.Now, Message = "系统启动" };
        using var fs = File.Create("log.json");
        JsonSerializer.Serialize(fs, log, new JsonSerializerOptions { WriteIndented = true });
    }
}

常见注意点

  • 若需保留中文字符而非Unicode转义,应设置JavaScriptEncoder.UnsafeRelaxedJsonEscaping。
  • WriteIndented设为true可生成带缩进的文件,方便人工查看。
  • 文件路径建议使用相对路径或Path.Combine拼接,避免硬编码分隔符。
  • 对不确定来源的对象的序列化,需注意循环引用会导致异常。

小结

通过System.Text.Json提供的JsonSerializer类与File相关API,C#开发者能以同步或异步方式优雅地将对象序列化为JSON文件。相比手动拼接字符串,这种方式更安全、易维护,也更符合现代.NET的开发习惯。

C#JSON序列化System_Text_Json文件写入对象转JSON修改时间:2026-07-24 20:36:48

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。