LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#使用 System.Text.Json 基础用法

admin
2024年11月7日 8:54 本文热度 376

前言

JSON(JavaScript Object Notation)是一种基于文本,独立于语言的轻量级数据交换格式,它易于阅读和编写,并且易于机器解析和生成。现已成为各种应用程序之间数据交换和通信的主流数据格式。在 .NET 通过三方库如 Newtonsoft.Json 或者 System.Text.Json 实现JSON的序列化与反序列化,本文一起了解 System.Text.Json 序列化与反序列化基础用法。

System.Text.Json

1、概述

System.Text.Json 是 C# 中的一个 JSON 序列化和反序列化库,从 .NET Core 3.0及更高版本中,通过内置方式提供支持。如果在.NET Framework 4.7及更高版本中,使用可通过NuGet包管理器安装 System.Text.Json

2、常用的类

  • JsonSeriliazer:提供将对象或值类型序列化为 JSON 以及将 JSON 反序列化为对象或值类型的功能;

  • JsonDocument: 提供用于检查 JSON 值的结构内容,而不自动实例化数据值的机制;

  • JsonSerializerOptions: 提供与 JsonSerializer 一起使用的选项;


3、序列化

JSON 序列化是将对象或值类型转化为JSON格式的文本内容的过程。下面是一个简单的示例:

using System;using System.Text.Encodings.Web;using System.Text.Json;
namespace Fountain.WinConsole.JSONDemo{    internal class Program    {        static void Main(string[] args)        {            // 定义一个对象            Address address = new Address            {                Province = "广东省",                City = "深圳市",                District="罗湖区",                Town= "莲塘街道",                Detail= "梧桐山公园"            };            // 配置 JsonSerializer 使用的选项 此处配置支持中文不转义            var options = new JsonSerializerOptions            {                // 允许字符通过而不进行转义方面更加宽松                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping            }            // 将对象序列化为JSON            string json= JsonSerializer.Serialize(address, options);            // 输出 JSON            Console.WriteLine(json);            //            Console.ReadKey();        }    }}

4、反序列化

JSON 反序列化是将 JSON 格式的文本内容转换回 .NET 对象或值类型的过程。下面是一个简单的示例:

using System;using System.Text.Encodings.Web;using System.Text.Json;
namespace Fountain.WinConsole.JSONDemo{    internal class Program    {        static void Main(string[] args)        {            // 配置 JsonSerializer 使用的选项 此处配置支持中文不转义            var options = new System.Text.Json.JsonSerializerOptions            {                // 允许字符通过而不进行转义方面更加宽松                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping            };            // JSON 格式文本内容            string jsonString = "{\"City\":\"深圳市\",\"Detail\":\"梧桐山公园\",\"District\":\"罗湖区\",\"Province\":\"广东省\",\"Town\":\"莲塘街道\"}";            // 将 JSON 反序列化为对象            var addr = JsonSerializer.Deserialize<Address>(jsonString);            Console.WriteLine(addr.Province);            // 或            var Address = JsonSerializer.Deserialize<Address>(jsonString, options);            Console.ReadKey();        }    }}

5、配置选项

通过使JsonSerializerOptions类配置选项,告诉JsonSerializer如何序列化和反序列化JSON。下面示例是一些选项使用:

var options = new JsonSerializerOptions{    // 整齐打印    WriteIndented = true,    // 关闭转义,默认情况下,序列化程序会转义所有非 ASCII 字符。即,会将中文替换为 \uxxxx,其中 xxxx 为字符的 Unicode 代码。    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,    // 反序列化不区分大小写    PropertyNameCaseInsensitive = true,    // 驼峰命名    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,    // 对字典的键进行驼峰命名    DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,    // 序列化的时候忽略null值属性    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,    // 忽略只读属性,因为只读属性只能序列化而不能反序列化,所以在以json为储存数据的介质的时候,序列化只读属性意义不大    IgnoreReadOnlyFields = true,    // 不允许结尾有逗号的不标准json    AllowTrailingCommas = false,    // 不允许有注释的不标准json    ReadCommentHandling = JsonCommentHandling.Disallow,    // 允许在反序列化的时候原本应为数字的字符串(带引号的数字)转为数字    NumberHandling = JsonNumberHandling.AllowReadingFromString,    // 处理循环引用类型    ReferenceHandler = ReferenceHandler.IgnoreCycles,    // 类型转换    Converters =    {        new JsonStringEnumConverter(JsonNamingPolicy.CamelCase)    }};

6、自定义转换器

System.Text.Json 提供了JSON序列化类创建自定义转换器,转换器是一种将对象或值与 JSON 相互转换的类。我们可以编写自定义转换器来替代内置转换器的默认行为。(本文不展开详细的描述

7、解析 JSON

使用 JsonDocument 类可对JSON文本内容进行解析。下面是一个简单的示例:

using System;using System.Text.Encodings.Web;using System.Text.Json;
namespace Fountain.WinConsole.JSONDemo{    internal class Program    {        static void Main(string[] args)        {            // JSON 文本内容            string jsonString = "{\"City\":\"深圳市\",\"Detail\":\"梧桐山公园\",\"District\":\"罗湖区\",\"Province\":\"广东省\",\"Town\":\"莲塘街道\"}";            // 创建 JsonDocument 对象            using (JsonDocument jsondocument = JsonDocument.Parse(jsonString))            {                var rootElement = jsondocument.RootElement;                //                var city = rootElement.GetProperty("City").GetString();                Console.WriteLine(city);                //                var Detail = rootElement.GetProperty("Detail").GetString();                Console.WriteLine(Detail);            }            Console.ReadKey();        }    }}

小结

以上是C#使用System.Text.Json序列化与反序列化基础用法,其使用还是比较容易的。希望本文对您有所收获,如有不到之处,请多多包涵。


该文章在 2024/11/7 10:31:27 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved