欢迎来到科站长!

C#教程

当前位置: 主页 > 软件编程 > C#教程

在C#中如何使用JSON

时间:2024-11-29 14:20:01|栏目:C#教程|点击:

JSON简介

1. 什么是 JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它的语法基于 JavaScript 对象表示法,简单、易读,同时被许多编程语言支持。尽管它来源于 JavaScript,但它并不依赖于 JavaScript,许多语言(如 Python、Java、C#、PHP 等)都能够解析和生成 JSON。

常见用途:

API 数据交互:在客户端和服务器之间传递数据时,JSON 是常用格式,特别是前后端交互时.

配置文件:许多应用程序使用 JSON 来保存配置文件(例如 .json 文件)。

数据持久化:在数据库或文件系统中使用 JSON 来存储结构化数据。

2. JSON 的基本语法结构

JSON 的数据结构非常简单,主要包括以下两种类型:

对象(Object):由花括号 {} 包围的一组键值对,键是字符串,值可以是任何合法的 JSON 数据类型。

数组(Array):由方括号 [] 包围的一组值,值可以是任意 JSON 类型。

示例:

{
  "name": "John",
  "age": 30,
  "isStudent": false,
  "courses": ["Math", "Science"],
  "address": {
    "city": "New York",
    "zipcode": "10001"
  }
}

JSON 的基本元素:

字符串:用双引号包裹,如 "name": "John"

数字:可以是整数或浮点数,如 "age": 30

布尔值:true 或 false

数组:一个有序的值列表,用方括号 [] 包裹

对象:一个无序的键值对集合,用花括号 {} 包裹

空值:null

你不难看出JSON 本质上由三种主要元素构成:

对象(Object):键值对的集合,类似于字典。JSON 对象用 {} 表示,包含键值对(key-value pairs),键必须是字符串,值可以是任意合法的 JSON 元素(如数组、对象或基本值)。

数组(Array):有序的元素集合,类似于列表或数组(不代表C#的数组,只是体现一个有序集合)。JSON 数组用 [] 表示,数组中的每个元素可以是任意合法的 JSON 元素(如对象、数组或基本值)。

基本值(Value):JSON 的最基础元素,可以是字符串、数字、布尔值或 null。这部分数据不能再包含其他子元素。

这很重要:因为充分分析这三种元素自身以及他们之间的关系是JSON处理的关键.很多JSON库也是考虑了这三种概念实现的.

3. JSON 的优势(作用)

JSON 之所以成为数据交换的首选格式,离不开它的诸多优势:

轻量级:相比于 XML 等格式,JSON 占用的体积更小,结构更为简洁。

可读性好:人类易读,同时解析程序也易于编写。

支持数据类型丰富:可以直接表示对象、数组、字符串、数字、布尔值等常见的数据结构。

广泛支持:几乎所有编程语言都提供了用于解析和生成 JSON 的库或内置函数。

标准化格式:JSON 的格式有明确的标准,确保了跨语言、跨平台的兼容性。

灵活性高:可以嵌套任意复杂的对象和数组,适合复杂的数据结构。

4. JSON 的常见使用场景

API 通信

在现代 Web 开发中,前后端的通信常常依赖于 JSON。客户端发送 HTTP 请求时,通常使用 JSON 格式来传递数据,服务器也通过 JSON 格式返回数据。下面是一个简单的例子:

请求体(客户端向服务器发送的数据):

{
  "username": "john_doe",
  "password": "123456"
}

响应体(服务器返回的数据):

{
  "status": "success",
  "message": "Login successful",
  "token": "abcdef123456"
}

配置文件

JSON 格式经常用于存储配置数据,因为它易于阅读和修改。例如,一个应用程序的配置文件可能如下:

{
  "app_name": "MyApp",
  "version": "1.0.0",
  "settings": {
    "theme": "dark",
    "language": "en"
  }
}

本地数据存储

前端开发中,JSON 常被用来在本地存储数据(如浏览器的 localStorage 或 sessionStorage)。

数据序列化

当将对象或数据结构保存到文件或数据库时,通常需要将其序列化为字符串格式,JSON 就是常用的序列化格式之一。

5.JSON和C#类型之间的映射关系

在 C# 中,JSON 的基本元素与相应的数据类型有直接的对应关系。

1. 字符串

JSON:字符串用双引号包裹,表示文本数据。

示例:"name": "John"

C# 对应类型:string

在 C# 中,JSON 的字符串类型直接映射为 string 类型。

示例:

1
string name = "John";

2. 数字

JSON:数字可以是整数或浮点数,表示数值类型的数据。

示例:"age": 30

C# 对应类型:int、float、double

在 C# 中,整数可以映射为 int,浮点数可以映射为 float 或 double,根据具体需要选择类型。

示例:

1
2
3
int age = 30;
float price = 29.99f;
double pi = 3.14159;

3. 布尔值

JSON:布尔值表示为 true 或 false。

示例:"isStudent": false

C# 对应类型:bool

在 C# 中,布尔值映射为 bool 类型。

示例:

1
bool isStudent = false;

4. 数组

JSON:数组是一个有序的值列表,用方括号 [] 包裹,数组中的每个元素可以是任意 JSON 类型。

示例:"courses": ["Math", "Science"]

C# 对应类型:List<T> 或数组 T[]

在 C# 中,JSON 数组可以映射为 List<T>(泛型列表)或者普通数组 T[],其中 T 是数组中元素的类型。

示例:

1
2
3
List<string> courses = new List<string> { "Math", "Science" };
// 或者
string[] coursesArray = { "Math", "Science" };

5. 对象

JSON:对象是一个无序的键值对集合,用花括号 {} 包裹,每个键必须是字符串,值可以是任意 JSON 类型。

示例:"address": { "city": "New York", "zipcode": "10001" }

C# 对应类型:自定义类或 Dictionary<string, T>

在 C# 中,JSON 对象可以映射为自定义类,类中的属性对应 JSON 对象中的键值对。也可以使用 Dictionary<string, T> 来表示键值对集合,其中 T 表示值的类型。

示例(使用自定义类):

class Address
{
    public string City { get; set; }
    public string Zipcode { get; set; }
}
Address address = new Address { City = "New York", Zipcode = "10001" };

示例(使用字典):

Dictionary<string, string> address = new Dictionary<string, string>
{
    { "city", "New York" },
    { "zipcode", "10001" }
};

6. 空值

JSON:空值表示为 null。

示例:"middleName": null

C# 对应类型:null

在 C# 中,JSON 的 null 对应 C# 中的 null 值。它可以应用于任何可空类型(如引用类型和 Nullable<T>)。

在 C# 中,JSON 的基本元素可以映射为相应的 C# 数据类型。这种映射使得我们可以轻松处理 JSON 数据,并与 C# 中的对象和类型进行交互。

6. 如何处理 JSON 数据

什么是序列化/反序列化

我们首先要先铺垫一下什么是序列化/反序列化

序列化反序列化是将对象和数据在不同格式之间转换的过程,主要用于数据持久化、网络传输等场景.在C#中我们的数据一般以对象形式存储在内存中,但是内存数据不能持久保存,你关机后或者程序关闭时数据就没了,那我们怎么把数据保存下来呢?

答案就是序列化,我们常用的就是将对象序列化为JSON(当然不止JSON,只是JSON更常用),这样我们再将其(这个说的更清晰点就是字符串,JSON绝大多数情况是以字符串形式出现的,只不过你可以理解为是一种有一定格式或一定规则的字符串)保存在磁盘或者通过网络传递给其他人都很方便.

理所当然的JSON转换为内存中的对象就是反序列化,常见的情景就是读取JSON格式的配置文件,先从磁盘读取出来再反序列化为对象,我们就可以十分方便的操作这个对象了.

怎么做?

大多数编程语言都提供了用于解析(反序列化)和生成(序列化)JSON 数据的库或内置函数。

C# 提供了 System.Text.Json 和 Newtonsoft.Json(第三方库)来处理 JSON。

我建议使用Newtonsoft.Json(NuGet Gallery | Newtonsoft.Json 13.0.3),这可以说是C#环境里最流行,最强大的一个库,经过二十年左右的发展支持绝大多数.net环境,目前在所有nuget包中下载量中排名第一.

常见用法

1. 使用 JsonConvert.SerializeObject 方法可以将 C# 对象转换为 JSON 字符串。

using Newtonsoft.Json;
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool IsStudent { get; set; }
}
Person person = new Person { Name = "John", Age = 30, IsStudent = false };
// 序列化为 JSON
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);


上一篇:C#常用数据结构栈的详细介绍

栏    目:C#教程

下一篇:C#中的XML与JSON数据处理的案例详解

本文标题:在C#中如何使用JSON

本文地址:https://www.fushidao.cc/ruanjianbiancheng/1301.html

广告投放 | 联系我们 | 版权申明

申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:257218569 | 邮箱:257218569@qq.com

Copyright © 2018-2025 科站长 版权所有冀ICP备14023439号