在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