从0到精通,System.Text.Json进阶技巧曝光,性能提升3倍!

boyanx2个月前技术教程7

一、引言

在现代软件开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端交互、配置文件管理以及分布式系统间的数据传输。System.Text.Json 是 .NET Core 3.0 及更高版本中引入的高性能 JSON 处理库,提供了序列化和反序列化的功能,并且与 .NET 平台深度集成。

二、基本使用

1. 序列化

序列化:对象转换为 JSON 字符串的过程。

using System;
using System.Text.Json;

publicclassPerson
{
publicstring Name { get; set; }
publicint Age { get; set; }
}

classProgram
{
static void Main()
{
var person = new Person { Name = "张三", Age = 30 };
string jsonString = JsonSerializer.Serialize(person);
Console.WriteLine(jsonString); // 输出:{"Name":"张三","Age":30}
}
}

对于复杂对象,如包含嵌套对象,也能轻松处理:

2. 反序列化

反序列化是将 JSON 字符串转换回 .NET 对象的过程。

using System;
using System.Text.Json;

publicclassPerson
{
publicstring Name { get; set; }
publicint Age { get; set; }
}

classProgram
{
static void Main()
{
string jsonString = "{\"Name\":\"张三\",\"Age\":30}";
Person person = JsonSerializer.Deserialize<Person>(jsonString);
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}

JsonSerializer.Deserialize<Person> 方法将 JSON 字符串转换为 Person 对象。

三、进阶技巧

1. 自定义序列化行为

提供了多种特性(Attributes),用于控制序列化和反序列化的行为。

(1)JsonPropertyName 特性

JsonPropertyName 特性可以指定属性在 JSON 中的名称。

using System.Text.Json.Serialization;

public class Product
{
[JsonPropertyName("商品名称")]
public string ProductName { get; set; }

[JsonPropertyName("价格")]
public decimal Price { get; set; }
}

序列化后,输出如下:

{"商品名称":"笔记本电脑","价格":5999.99}
(2)JsonIgnore 特性

JsonIgnore 特性用于在序列化和反序列化时忽略某个属性。

public class Person
{
public string Name { get; set; }

[JsonIgnore]
public int Age { get; set; }
}

序列化时,Age 属性将不会出现在 JSON 中。

(3)JsonRequired 特性

JsonRequired 特性用于指定某个属性在 JSON 中必须存在,否则会抛出异常。

public class Person
{
[JsonRequired]
public string Name { get; set; }

public int Age { get; set; }
}

如果 JSON 中缺少 Name 属性,反序列化时会报错。

2. 自定义转换器

在某些情况下,可能需要对特定类型的序列化和反序列化进行自定义。可以通过实现 JsonConverter<T> 来创建自定义转换器。

public classMyCustomConverter : JsonConverter<int>
{
public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
// 自定义反序列化逻辑
returnint.Parse(reader.GetString());
}

public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options)
{
// 自定义序列化逻辑
writer.WriteStringValue(value.ToString());
}
}

然后,将自定义转换器添加到 JsonSerializerOptions 中:

var options = new JsonSerializerOptions
{
Converters = { new MyCustomConverter() }
};
3. 配置序列化选项

System.Text.Json 提供了 JsonSerializerOptions 类,用于自定义序列化和反序列化的行为。

var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 使用驼峰式命名
WriteIndented = true, // 格式化输出
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault // 忽略默认值
// DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault | JsonIgnoreCondition.WhenWriting
//通过 `JsonSerializerOptions` 的 `DefaultIgnoreCondition` 属性,可以忽略默认值或空值。
};

四、总结

System.Text.Json 是一个强大且高效的 JSON 处理库,适用于 .NET 开发中的各种场景。通过掌握基本的序列化和反序列化操作,以及进阶的自定义特性、转换器和配置选项,可以灵活地处理 JSON 数据,满足复杂的业务需求。

Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节。

  • 如果文章对您有帮助,请给我一个赞,谢谢
    点个小心是对我对大的支持!感谢
标签: js格式化json

相关文章

必知必会!Python json模块全解析

深入掌握Python json模块:从基础到实战的全面指南在当今数据驱动的时代,高效的数据处理与交换至关重要。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格...

好用工具分享 - 漂亮的免费开源工具HTTP Toolkit

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)针对性地拦截 HTTP 和 HTTPS,包括以下客户端:桌面浏览器,如Chrome、Edge 和 FirefoxAndroid应用程序和浏览...

JavaScript处理JSON的方法

假设我们有一个复杂的对象,我们希望将其转换为字符串,以通过网络发送,或者只是为了在日志中输出它。当然,这样的字符串应该包含所有重要的属性。我们可以像这样实现转换:let user = { name...

针对MySQL特有函数的梧桐替代解决方法

MySQL 8.0 特有函数清单包含了一些重要的JSON函数、正则表达式函数和地理空间函数,我们针对这些内容,梳理了基于梧桐6.0版本的替代解决方法。以方便用户在平时的国产化项目及其它工作中更加方便的...

VS Code常用的插件分享

VS Code前端开发工具之必备插件,Visual Studio Code是由微软开发免费、开源、跨平台的一款IDE,支持多种编程语言开发,具有强大的插件扩展能力,这篇文章我们就来看看VS Code在...

「Postman」测试(Tests)脚本编写和断言详解

测试确认您的 API 按预期工作,服务之间的集成运行可靠,并且新开发没有破坏任何现有功能。您可以使用 JavaScript 为 Postman API 请求编写测试脚本。当您的 API 项目出现问题时...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。