在现代C#开发中,JSON序列化是处理数据交换的核心技能之一。无论是调用Web API、存储配置文件,还是前后端通信,几乎都离不开将对象转换为JSON字符串(序列化)或将JSON字符串还原为对象(反序列化)。然而,在实际开发过程中,开发者常常会遇到类型转换的问题,比如日期格式不一致、数字类型丢失精度、自定义对象无法正确映射等。
本文将从零开始,手把手教你如何在C#中高效、安全地进行JSON序列化与反序列化,并重点讲解常见类型转换问题的解决方案。无论你是刚入门的新手,还是有一定经验的开发者,都能从中受益。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。在C#中,JSON序列化就是将一个.NET对象(如类实例、列表、字典等)转换成JSON格式的字符串;而反序列化则是将JSON字符串还原回对应的.NET对象。
目前C#生态中有两个主流的JSON处理库:
下面我们将分别介绍这两个库的基本用法和类型转换技巧。
首先,确保你的项目基于 .NET Core 3.0 或更高版本。以下是一个基本示例:
using System;using System.Text.Json;public class Person{ public string Name { get; set; } public int Age { get; set; } public DateTime BirthDate { get; set; }}// 序列化var person = new Person { Name = "张三", Age = 30, BirthDate = new DateTime(1994, 5, 20) };string json = JsonSerializer.Serialize(person);Console.WriteLine(json);// 反序列化Person deserialized = JsonSerializer.Deserialize<Person>(json);Console.WriteLine($"姓名: {deserialized.Name}, 年龄: {deserialized.Age}"); 注意:默认情况下,System.Text.Json 对日期格式使用 ISO 8601 标准(如 "1994-05-20T00:00:00"),如果你需要自定义格式(如中文习惯的 yyyy-MM-dd),可以通过 JsonSerializerOptions 配置:
var options = new JsonSerializerOptions{ WriteIndented = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase // 转为小驼峰命名};// 自定义日期格式(需配合 Converters)options.Converters.Add(new JsonStringEnumConverter());string json = JsonSerializer.Serialize(person, options); 如果你的项目仍在使用 .NET Framework,或者需要更灵活的类型控制,Newtonsoft.Json 是更好的选择。首先通过 NuGet 安装:
Install-Package Newtonsoft.Json 基本用法如下:
using Newtonsoft.Json;public class Product{ public string Name { get; set; } public decimal Price { get; set; } public string Category { get; set; }}var product = new Product { Name = "笔记本电脑", Price = 5999.99m };// 序列化string json = JsonConvert.SerializeObject(product, Formatting.Indented);// 反序列化Product p = JsonConvert.DeserializeObject<Product>(json); Newtonsoft.Json 支持通过特性(Attributes)精细控制序列化行为。例如:
public class User{ [JsonProperty("user_name")] public string UserName { get; set; } [JsonIgnore] public string Password { get; set; } // 不参与序列化 [JsonConverter(typeof(CustomDateTimeConverter))] public DateTime LastLogin { get; set; }} 你甚至可以编写自定义的 JsonConverter 来处理特殊类型的转换,比如将字符串 "true/false" 转为布尔值,或将 Unix 时间戳转为 DateTime。
JsonSerializerOptions 或 JsonConverter 控制输出格式。decimal 转为 double,在反序列化时明确指定类型。PropertyNamingPolicy(System.Text.Json)或 [JsonProperty](Newtonsoft.Json)。$type 字段实现多态,System.Text.Json 需要自定义转换器。掌握 C# JSON序列化 和 类型转换 技术,是构建健壮、可维护应用程序的基础。对于新项目,建议优先使用 System.Text.Json;若需高级功能或兼容旧项目,则 Newtonsoft.Json 仍是可靠之选。
无论选择哪个库,理解其配置选项和扩展机制,都能帮助你轻松应对各种数据转换场景。希望本教程能为你扫清JSON处理中的障碍!
—— 学会了就去试试吧!实践是最好的老师。——
本文由主机测评网于2025-12-07发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124033.html