求助:在C#中实现JSON与Customer列表的序列化及反序列化
问题分析与解决:Customer对象列表的JSON序列化及代码修正
你的代码存在基础语法错误,同时缺少JSON序列化的核心实现,下面一步步解决:
一、先修正代码的基础编译错误
你的代码无法正常运行,问题集中在这几点:
- 变量名拼写不一致:声明的是
customer,赋值时误用了cliente - 类型不匹配:
number是int类型,但Console.ReadLine()返回字符串,直接赋值会触发编译错误 - 代码位置错误:业务逻辑代码直接放在
Program类下,没有放在C#程序的入口Main方法中
修正后的基础代码(可正常收集用户输入并添加到列表):
namespace customers_manager { internal class Program { public class Customer { public string name { get; set; } public string email { get; set; } public int number { get; set; } } static void Main(string[] args) { List<Customer> Datac = new List<Customer>(); Customer customer = new Customer(); Console.WriteLine("New Customer data:"); Console.Write("Name: "); customer.name = Console.ReadLine(); Console.Write("Email: "); customer.email = Console.ReadLine(); Console.Write("Number: "); // 处理字符串转int的逻辑,避免输入非数字导致崩溃 if (int.TryParse(Console.ReadLine(), out int phoneNumber)) { customer.number = phoneNumber; } else { Console.WriteLine("输入的手机号不是有效数字,将设为0"); customer.number = 0; } Datac.Add(customer); Console.WriteLine("Finish, Press enter to leave"); Console.ReadLine(); } } }
二、实现List转JSON字符串
现在要把Datac列表转换成JSON格式,常用两种方案:
方案1:使用.NET内置的System.Text.Json(无需额外安装)
直接引用命名空间后调用序列化方法即可:
// 先添加命名空间 using System.Text.Json; // 在Main方法中,添加完customer到列表后执行序列化: var serializeOptions = new JsonSerializerOptions { WriteIndented = true }; string jsonResult = JsonSerializer.Serialize(Datac, serializeOptions); Console.WriteLine("\n转换后的JSON:"); Console.WriteLine(jsonResult);
WriteIndented = true会生成格式化后的JSON,更易读;如果不需要格式化,可省略该选项。
方案2:使用Newtonsoft.Json(第三方库,需NuGet安装)
先在NuGet包管理器中安装Newtonsoft.Json包,再使用以下代码:
// 添加命名空间 using Newtonsoft.Json; // 序列化代码 string jsonResult = JsonConvert.SerializeObject(Datac, Formatting.Indented); Console.WriteLine("\n转换后的JSON:"); Console.WriteLine(jsonResult);
三、额外提示
如果你的手机号可能包含国际区号、分隔符等非数字字符,建议把Customer类的number属性改成string类型,避免类型转换时的各种异常。
内容的提问来源于stack exchange,提问作者Benjamim Inacio
相关产品推荐
相关产品推荐

