如何在C#中将Student对象写入文件?
在C#中将Student对象写入文件的完整实现方案
我来帮你搞定这个问题,先梳理下你给出的代码里的几个小细节问题:比如print方法放在Student类里作为实例方法不太方便调用,建议改成静态方法或者移到Program类;另外Main方法里的文件路径没写完,还有核心的写入文件逻辑缺失。下面给你几种不同场景下的实用实现方案:
1. 写入人类可读的文本文件(最简单的方式)
这种方式利用你已经重写的ToString()方法,直接把学生信息逐行写入文本文件,适合只需要简单记录、方便查看的场景。
完整代码如下:
using System; using System.IO; namespace WriteStudents { class Student { // 建议用属性代替公共字段,更符合C#的编码规范 public string Name { get; set; } public int Mark { get; set; } public Student(string n, int m) { Name = n; Mark = m; } // 用字符串插值重写ToString,比拼接更简洁清晰 public override string ToString() { return $"{Name} {Mark}"; } } class Program { static void Main(string[] args) { // 准备测试的学生数组 Student[] studentGroup = new Student[] { new Student("Alice", 92), new Student("Bob", 87), new Student("Charlie", 79) }; // 替换成你实际要保存的文件路径 string filePath = @"C:\your\path\students.txt"; // 使用StreamWriter配合using语句,自动释放文件资源,避免文件被占用 using (StreamWriter writer = new StreamWriter(filePath)) { foreach (var student in studentGroup) { writer.WriteLine(student.ToString()); } } Console.WriteLine("学生数据已成功写入文本文件!"); } } }
2. 二进制序列化写入(适合还原对象场景)
如果你需要后续从文件里直接还原出Student对象,二进制序列化是个高效的选择,它会保存对象的完整状态。
注意:必须给Student类标记[Serializable]特性才能进行二进制序列化。
完整代码:
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; namespace WriteStudents { // 必须添加Serializable特性,否则无法进行二进制序列化 [Serializable] class Student { public string Name { get; set; } public int Mark { get; set; } public Student(string n, int m) { Name = n; Mark = m; } } class Program { static void Main(string[] args) { Student[] studentGroup = new Student[] { new Student("Alice", 92), new Student("Bob", 87), new Student("Charlie", 79) }; string filePath = @"C:\your\path\students.bin"; // 用FileStream和BinaryFormatter完成序列化写入 using (FileStream fs = new FileStream(filePath, FileMode.Create)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs, studentGroup); } Console.WriteLine("学生对象已通过二进制序列化写入文件!"); } } }
3. JSON序列化写入(跨平台通用,可读性强)
JSON格式现在是跨平台交互的主流,既可读又能方便地反序列化回对象,适合大多数现代开发场景。
如果你用的是.NET Core/.NET 5+,可以直接用自带的System.Text.Json;如果是.NET Framework,建议通过NuGet安装Newtonsoft.Json包。
这里给出用System.Text.Json的实现:
using System; using System.IO; using System.Text.Json; namespace WriteStudents { class Student { public string Name { get; set; } public int Mark { get; set; } public Student(string n, int m) { Name = n; Mark = m; } } class Program { static void Main(string[] args) { Student[] studentGroup = new Student[] { new Student("Alice", 92), new Student("Bob", 87), new Student("Charlie", 79) }; string filePath = @"C:\your\path\students.json"; // 序列化时开启缩进,生成格式美观的JSON var serializeOptions = new JsonSerializerOptions { WriteIndented = true }; string jsonContent = JsonSerializer.Serialize(studentGroup, serializeOptions); // 直接把JSON字符串写入文件 File.WriteAllText(filePath, jsonContent); Console.WriteLine("学生数据已通过JSON序列化写入文件!"); } } }
方案选择建议
- 简单文本记录:选第一种方式,快速直观
- 需要还原对象:选二进制序列化,效率高
- 跨平台/需要和其他系统交互:选JSON序列化,通用性强
内容的提问来源于stack exchange,提问作者blazing
相关产品推荐
相关产品推荐

