在现代软件开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端交互、配置文件管理以及分布式系统间的数据传输。System.Text.Json是 .Net Core 3.0 及更高版本中引入的高性能 JSON 处理库,提供了序列化和反序列化的功能,并且与 .NET 平台深度集成。1. 序列化摘要:在现代软件开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端交互、配置文件管理以及分布式系统间的数据传输。
序列化:对象转换为 JSON 字符串的过程。
using System;using System.Text.Json;
publicclassPerson
{
publicstringName { get; set; }
publicintAge { get; set; }
}
classProgram
{
static voidMain
{
var person = new Person { Name ="张三", Age =30};
stringJsonString = JsonSerializer.Serialize(person);
Console.WriteLine(jsonString); // 输出:{"Name":"张三","Age":30}
}
}
对于复杂对象,如包含嵌套对象,也能轻松处理:
2. 反序列化反序列化是将 JSON 字符串转换回 .NET 对象的过程。
using System;using System.Text.Json;
publicclassPerson
{
publicstringName { get; set; }
publicintAge { get; set; }
}
classProgram
{
static voidMain
{
StringjsonString ="{\"Name\":\"张三\",\"Age\":30}";
Person person = JsonSerializer.Deserialize(jsonString);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}JsonSerializer.Deserialize方法将 JSON 字符串转换为Person1. 自定义序列化行为
提供了多种特性(Attributes),用于控制序列化和反序列化的行为。
(1)JsonPropertyName 特性JsonPropertyName特性可以指定属性在 JSON 中的名称。using System.Text.Json.Serialization;public classProduct
{
[JsonPropertyName("商品名称")]
publicstringProductName { get; set; }
[JsonPropertyName("价格")]
publicdecimalPrice { get; set; }
}
序列化后,输出如下:
(2)JsonIgnore 特性JsonIgnorepublic class Person{
publicstringName { get; set; }
[JsonIgnore]
publicintAge { get; set; }
}序列化时,Age属性将不会出现在 JSON 中。JsonRequired特性用于指定某个属性在 JSON 中必须存在,否则会抛出异常。public class Person
{
[JsonRequired]
publicstringName { get; set; }
publicintAge { get; set; }
}如果 JSON 中缺少Name属性,反序列化时会报错。2. 自定义转换器在某些情况下,可能需要对特定类型的序列化和反序列化进行自定义。可以通过实现JsonConverter来创建自定义转换器。public classMyCustomConverter:JsonConverterint
{
public overrideintRead(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// 自定义反序列化逻辑
returnint.Parse(reader.GetString);
}
public override voidWrite(Utf8JsonWriter writer,intvalue, JsonSerializerOptions options)
{
// 自定义序列化逻辑
writer.WriteStringValue(value.ToString);
}
}然后,将自定义转换器添加到中:var options = new JsonSerializerOptions
{
Converters = { new MyCustomConverter }
};3. 配置序列化选项提供了JsonSerializerOptions类,用于自定义序列化和反序列化的行为。var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 使用驼峰式命名
WriteIndented =true, // 格式化输出
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault // 忽略默认值
// DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault | JsonIgnoreCondition.WhenWriting
//通过 `JsonSerializerOptions` 的 `DefaultIgnoreCondition` 属性,可以忽略默认值或空值。
};是一个强大且高效的 JSON 处理库,适用于 .NET 开发中的各种场景。通过掌握基本的序列化和反序列化操作,以及进阶的自定义特性、转换器和配置选项,可以灵活地处理 JSON 数据,满足复杂的业务需求。
Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。
如果文章对您有帮助,请给我一个赞,谢谢
点个小心是对我对大的支持!感谢
来源:opendotnet
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!