面向C#初学者的JSON入门与实践

news/2024/7/20 17:26:03 标签: c#, json, chrome, windows, AI, 大模型, python

本篇为21天速通C#专栏最后一篇,前面的已经基本囊括C#基础所有内容,JOSN对C#来说,可能有些人认为不是很重要,但可以不精通,不能不知道,本篇仅做入门讲解和实践,对C#有兴趣可以订阅专栏,从C#简介开始添加链接描述可以说是零基础入门。

引言

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于文本,易于人阅读和编写,同时也易于机器解析和生成。JSON在Web开发中被广泛使用,特别是在客户端与服务器之间的数据传输上。对于C#开发者来说,掌握JSON的操作方法是非常重要的。

在本篇博客中,我们将从JSON的基本概念开始,逐步深入到如何在C#中处理JSON数据。我们会介绍如何使用Newtonsoft.Json库来进行序列化(将对象转换为JSON字符串)和反序列化(将JSON字符串转换为对象),以及如何使用System.Text.Json这一.NET Core中引入的新库。最后,我们还会探讨一些高级话题,包括自定义序列化设置和错误处理。

什么是JSON

JSON是一种完全独立于语言的格式,但使用的是类似于JavaScript编程语言的约定。一个JSON文档由一系列的键值对构成,其中的数据结构主要有两种:对象(由花括号{}包围)和数组(由方括号[]包围)。

JSON对象

一个JSON对象由一系列键值对构成,键和值之间用冒号:分隔,键值对之间用逗号,分隔。例如:

json">{
  "name": "张三",
  "age": 30,
  "isStudent": false
}

JSON数组

JSON数组由一系列值构成,值之间用逗号,分隔,整个数组由方括号[]包围。例如:

json">[
  "苹果",
  "香蕉",
  "橘子"
]

JSON与C#对象的映射

在C#中,我们通常会将JSON数据映射到类(Class)或者结构体(Struct)的实例上。这样,我们可以方便地对数据进行操作和管理。

C#中的类与JSON

假设我们有一个表示人的C#类Person,它与上面的JSON对象结构相似:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool IsStudent { get; set; }
}

使用Newtonsoft.Json处理JSON

Newtonsoft.Json是一个流行的JSON处理库,它提供了简单的API来序列化和反序列化JSON数据。

安装Newtonsoft.Json

在C#项目中使用Newtonsoft.Json之前,我们需要通过NuGet包管理器安装它。在Visual Studio中,我们可以通过“工具”->“NuGet包管理器”->“包管理器控制台”来安装:

Install-Package Newtonsoft.Json

JSON序列化

序列化是将对象状态转换为JSON字符串的过程。在C#中,我们可以使用JsonConvert.SerializeObject方法来序列化对象。

Person person = new Person
{
    Name = "张三",
    Age = 30,
    IsStudent = false
};

string jsonString = JsonConvert.SerializeObject(person);

我们也可以通过Formatting.Indented参数来生成格式化(缩进)的JSON字符串,这样更易于阅读:

string prettyJsonString = JsonConvert.SerializeObject(person, Formatting.Indented);

JSON反序列化

反序列化是将JSON字符串转换回C#对象的过程。我们可以使用JsonConvert.DeserializeObject方法来进行反序列化。

string jsonString = "{\"Name\":\"张三\",\"Age\":30,\"IsStudent\":false}";
Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonString);

处理复杂的JSON结构

在实际应用中,我们可能会遇到更复杂的JSON结构,比如嵌套的对象和数组。Newtonsoft.Json提供了强大的功能来处理这些情况。

处理数组

如果我们的JSON数据是一个数组,我们可以将其反序列化到C#中的JArray对象,然后进行操作。

string jsonArrayString = "[{\"Name\":\"张三\"},{\"Name\":\"李四\"}]";
JArray peopleArray = JArray.Parse(jsonArrayString);

foreach (var person in peopleArray)
{
    string name = person["Name"].ToString();
    Console.WriteLine(name);
}
处理嵌套对象

对于嵌套的对象,我们可以定义相应的C#类来映射JSON结构,然后进行反序列化。

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
}

public class Employee
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Address HomeAddress { get; set; }
}

string nestedJsonString = "{\"Name\":\"张三\",\"Age\":30,\"HomeAddress\":{\"Street\":\"某某街\",\"City\":\"某某市\"}}";
Employee employee = JsonConvert.DeserializeObject<Employee>(nestedJsonString);

使用System.Text.Json处理JSON

随着.NET Core的推出,Microsoft引入了新的JSON处理库System.Text.Json。它提供了与Newtonsoft.Json类似的功能,但在性能和一些特性上有所不同。

安装System.Text.Json

与安装Newtonsoft.Json类似,我们需要通过NuGet包管理器安装System.Text.Json

Install-Package System.Text.Json

使用System.Text.Json序列化和反序列化

System.Text.Json提供了JsonSerializer.SerializeJsonSerializer.Deserialize方法来进行序列化和反序列化操作。

// 序列化
Person person = new Person
{
    Name = "张三",
    Age = 30,
    IsStudent = false
};

string jsonString = JsonSerializer.Serialize(person);

// 反序列化
Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonString);

高阶用法

自定义序列化设置

有时候,我们需要自定义序列化的行为,比如日期格式、忽略空值等。我们可以通过创建JsonSerializerOptions实例来设置这些选项。

var options = new JsonSerializerOptions
{
    WriteIndented = true, // 格式化输出
    IgnoreNullValues = true, // 忽略空值
    PropertyNameCaseInsensitive = true // 属性名不区分大小写
};

string customizedJsonString = JsonConvert.SerializeObject(person, options);

错误处理

在处理JSON数据时,我们可能会遇到各种错误,比如JSON格式错误、反序列化时类型不匹配等。我们需要妥善处理这些错误,确保程序的健壮性。

try
{
    Person person = JsonConvert.DeserializeObject<Person>(jsonString);
}
catch (JsonException ex)
{
    // 处理JSON错误
    Console.WriteLine(ex.Message);
}

结语

JSON是现代Web开发中不可或缺的一部分,对于C#开发者来说,掌握如何在.NET环境中处理JSON数据是非常重要的。通过本篇博客,我们学习了JSON的基本概念,以及如何在C#中使用Newtonsoft.JsonSystem.Text.Json这两个库来进行序列化和反序列化操作。
我们讨论了如何处理复杂的JSON结构,包括数组和嵌套对象,还探讨了如何自定义序列化设置和进行错误处理。希望这篇博客能帮助C#初学者快速上手JSON操作,为进一步的学习和实践打下坚实的基础。


请注意,本篇博客是一个简化的示例,旨在为C#初学者提供一个关于JSON处理的入门指南。在实际开发中,可能需要考虑更多的细节和最佳实践。随着技能的提升,建议读者深入学习更多关于JSON处理的知识,包括但不限于使用更高级的库功能、优化性能、安全性考虑等。


http://www.niftyadmin.cn/n/5460711.html

相关文章

数据库原理与应用(SQL Server)笔记——第十五章 事务与数据库管理

目录 一、事务二、锁定机制&#xff08;一&#xff09;不一致性&#xff08;二&#xff09;锁模式&#xff08;三&#xff09;死锁 三、数据库管理&#xff08;一&#xff09;SQL Server身份验证&#xff08;二&#xff09;数据库的备份&#xff08;三&#xff09;数据库的恢复…

Vue系列——数据对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>el:挂载点</title> </head> <body&g…

count(“0“),split() ,sys.stdin.readline() ,matrix.append, input().strip()

目录 count() 方法主要用于计算一个序列(例如列表、元组或字符串)中某个元素出现的次数

Chrome 设置在新窗口中打开链接(已登录google账号版)

Chrome的链接默认是在原标签页中打开的&#xff0c;如果要在新窗口中打开&#xff0c;需要自己自行设置&#xff0c;在此&#xff0c;针对已经登录google账号的chrome浏览器怎么进行设置进行说明。 一、点击登录图标->更多设置 二、选择其他设置->在新窗口中打开搜索结果…

【Qt 学习笔记】Day1 | Qt 开发环境的搭建

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Day1 | Qt 开发环境的搭建 文章编号&#xff1a;Qt 学习笔记 / 02 文…

HTML基本元素

文章目录 如何制作标题如何制作文字如何做粗体字检查我们程序码给输出文字添加属性 HTML 一个HTML标签包含着&#xff1a; 起始标签&#xff1a;它包含了元素的名字&#xff0c;夹在一对 <、>&#xff08;尖括号&#xff09;之间。它指明元素从何处开始生效。结束标签&am…

CrossOver2024最新免费版虚拟机软件 Mac和Linux系统上运行Windows 应用/游戏 CrossOver是什么软件

CrossOver是一款由CodeWeavers公司开发的&#xff0c;运行在Mac和Linux操作系统下&#xff0c;能够模拟Windows系统应用运行环境的软件。它不需要用户单独安装Windows操作系统&#xff0c;就能让Windows平台上的应用程序在Mac和Linux上顺畅运行。CrossOver在技术上使用了Wine&a…

node获取客户端请求ip

注&#xff1a; nginx代理到nodeJs服务&#xff0c;访问nginx时把获取ip的请求头带给node&#xff0c;然后在node获取携带ip的请求头 Nginx配置 location / {proxy_pass http://127.0.0.1:8808;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $pr…