C#—Json序列化和反序列化

C#—Json序列化和反序列化

在C#中,可以使用System.Web.Script.Serialization.JavaScriptSerializer类来序列化和反序列化JSON数据。

可以使用Newtonsoft.Json库进行JSON的序列化。

可以使用.NET内置的System.Text.Json库来进行JSON的序列化。

json文件格式

[ { Name:"za",Age:10} { Name:"zs",Age:11} ]

一、使用JavaScriptSerializer类来序列化和反序列化

实例操作
using System;
using System.Web.Script.Serialization;public class Program
{public static void Main(){// 创建一个示例对象var person = new Person{Name = "张三",Age = 30};// 序列化对象到JSON字符串JavaScriptSerializer serializer = new JavaScriptSerializer();string json = serializer.Serialize(person);Console.WriteLine(json);// 反序列化JSON字符串到对象string jsonString = "{\"Name\":\"李四\",\"Age\":25}";Person deserializedPerson = serializer.Deserialize<Person>(jsonString);Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");}
}public class Person
{public string Name { get; set; }public int Age { get; set; }
}

二、使用Newtonsoft.Json库进行JSON的序列化。

本方法采用的是第三方类库实现json序列化,Newtonsoft.Json(JSON.ENT)包;(本第三方支持弱类型转换)

Newtonsoft.Json 相比于 System.Text.Json,具有以下优势和特点

(1)使用广泛 多年来已经存在并广泛使用,Newtonsoft.Json 是一个成熟的第三方库,在 .NET 社区中被广泛接受和使用。它拥有丰富的功能和强大的灵活性,已经在许多项目中得到验证。

(2)功能丰富 更丰富的功能,Newtonsoft.Json 提供了一些更高级的功能,如完全自定义的序列化和反序列化逻辑,包括对循环引用的处理、自定义转换器、忽略属性等等。它可以方便地处理一些复杂的 JSON 数据场景。

(3)支持若类型转换的特点

实例操作

首先,需要安装Newtonsoft.Json包,可以通过NuGet进行安装。

using Newtonsoft.Json;public class Person
{public string Name { get; set; }public int Age { get; set; }
}Person person = new Person
{Name = "John Doe",Age = 30
};// 序列化
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);// 反序列化
string data = "{\"Name\":\"李四\",\"Age\":25}";
person=JsonConvert.DeserializeObject<Person>(data);

三、使用.NET内置的System.Text.Json库来进行JSON的序列化

System.Text.Json 相比于 Newtonsoft.Json,具有以下优势和特点

(1)性能 System.Text.Json 在性能方面进行了优化,通常比 Newtonsoft.Json 更快。它利用了新的读写 API,采用更高效的内部实现,以提供更好的性能和内存利用率。

(2)属于 .NET Core System.Text.Json 是 .NET Core 的一部分,因此在创建跨平台应用程序时,不需要额外的依赖项。这使得在 .NET Core 平台上使用它更加方便。

(3)简单场景 System.Text.Json 提供了一些简化的 API,使得在处理简单的 JSON 数据时更容易操作。 例如,可以直接通过 JsonSerializer.Deserialize() 方法进行快速的反序列化,而无需像在 Newtonsoft.Json 中那样使用 JsonConvert.DeserializeObject()。

(4)默认是强类型转换,比如:实体类定义的是字符串,json字符串返回的是整型,转换时会报错

实例操作

首先,需要安装System.Text.Json包,可以通过NuGet进行安装。

using System;
using System.Text.Json;namespace SerializeJsonExample
{class Program{static void Main(string[] args){// 创建一个示例对象var person = new Person{Name = "张三",Age = 30,};// 使用JsonSerializer.Serialize方法将对象序列化为JSON字符串string jsonString = JsonSerializer.Serialize(person);Console.WriteLine(jsonString);// 输出:{"Name":"张三","Age":30}// 使用JsonSerializer.Deserialize方法将Json字符串反序列化为对象string data = "{\"Name\":\"李四\",\"Age\":25}";Person p = JsonSerializer.Deserialize<Person>(data)}}// 定义一个简单的Person类,用于序列化示例public class Person{public string Name { get; set; }public int Age { get; set; }}
}

System.Text.Json包可以在模型类中进行指定数据

// json在序列化的时候可以把Code序列化成服务器中相对应的code,
public class One
{[JsonPropertyName("code")]public string Code { get; set; }[JsonPropertyName("message")]public string Message { get; set; }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搜索引擎优化培训机构怎么选?这篇文章告诉你答案

搜索引擎优化&#xff08;SEO&#xff09;已成为网络生存必备技能。然而面对众多培训机构&#xff0c;如何选择优秀者&#xff1f;本文将为您揭晓此事&#xff0c;助您找到腾飞之地。 一、培训机构的多样性&#xff1a;琳琅满目的选择 当前SEO培训市场繁芜复杂&#xff0c;既…

C++ 八股(1)

C语言中strcpy为什么不安全&#xff1f;如何解决&#xff1f; 主要原因是缺乏对输入长度的边界检查&#xff0c;容易导致缓冲区溢出漏洞。 解决&#xff1a;可以使用strncpy函数替代&#xff0c;或者在程序最顶端加入代码段 #define _CRT_SECURE_NO_WARNINGS 缓冲区溢出 …

javascript高级部分笔记

javascript高级部分 Function方法 与 函数式编程 call 语法&#xff1a;call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义&#xff1a;调用一个对象的一个方法&#xff0c;以另一个对象替换当前对象。 说明&#xff1a;call 方法可以用来代替另一个对象调用一个方法。cal…

MySQL运维实战之ProxySQL(9.5)proxysql和MySQL Group Replication配合使用

作者&#xff1a;俊达 如果后端MySQL使用了Group Replication&#xff0c;可通过配置mysql_group_replication_hostgroups表来实现高可用 1 mysql_group_replication_hostgroups 字段描述writer_hostgroup写hostgroup。read_only和super_read_only OFF的节点。backup_writer…

Vue3 pdf.js将二进制文件流转成pdf预览

好久没写东西&#xff0c;19年之前写过一篇Vue2将pdf二进制文件流转换成pdf文件&#xff0c;如果Vue2换成Vue3了&#xff0c;顺带来一篇文章&#xff0c;pdf.js这个东西用来解决内网pdf预览&#xff0c;是个不错的选择。 首先去pdfjs官网&#xff0c;下载需要的文件 然后将下载…

第4章 IT服务规划设计

第4章 IT服务规划设计 4.1 概述 规划设计处于整个IT服务生命周期中的前端&#xff0c;可以帮助IT服务供方了解客户的需求&#xff0c;并对其进行全面的需求分析&#xff0c;然后通过对服务要素&#xff08;包括人员、资源、技术和过程&#xff09;、服务模式和服务方案的具体…

OpenHarmony4.x 系统模拟器环境

先下载源码和编译程序&#xff1a; 首先查看 OpenHarmony4.1源码下载、编译&#xff0c;生成OHOS_Image可执行文件的最简易流程 准备在QEMU模拟器中运行ARM Cortex-M4的轻型开源鸿蒙系统 官方支持的开发板和模拟器种类-编译形态整体说明OpenAtom OpenHarmony 已支持的示例工…

ArduPilot开源代码之AP_MSP

ArduPilot开源代码之AP_MSP 1. 源由2. Library设计2.1 启动代码2.2 支持特性2.3 MSP DisplayPort v.s. DJI FPV OSD 3. 重要例程3.1 AP_MSP::init3.2 AP_MSP::loop3.3 AP_MSP::init_backend 4. 实例理解5. 总结6. 参考资料 1. 源由 AP_MSP是处理MSP协议格式的报文数据应用类。…

反向业务判断逻辑

业务功能需求&#xff1a; 根据id扣减用户余额 包括&#xff1a;判断用户状态是否正常判断用户余额是否充足 正向逻辑&#xff1a; 判断用户为正常下&#xff0c;判断用户余额充足&#xff0c;进行余额扣减&#xff1b; 》正向逻辑&#xff0c;多重嵌套&#xff0c;代码不美观…

✈️一文带你入门【NestJS】

✈️引言 在现代Web开发领域&#xff0c;框架和技术的迭代速度令人咋舌。其中&#xff0c;NestJS作为一款基于Node.js的后端框架&#xff0c;以其卓越的设计理念和强大的功能集&#xff0c;迅速吸引了众多开发者的眼球。本文将带你深入了解NestJS的起源、发展&#xff0c;以及…

SpringIOC原理

SpringIOC原理 1.概念 Spring通过一个配置文件描述Bean及Bean之间的依赖关系&#xff0c;利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。Spring的IOC容器在完成这些底层工作的基础上&#xff0c;还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、…

AI提示词:AI辅导「数学作业」

辅导孩子作业对许多家长来说可能是一件头疼的事&#xff0c;但这部分工作可以在一定程度上交给AI来完成。 打开ChatGPT4,输入以下内容&#xff1a; # Role 数学辅导专家## Profile - author: 姜小尘 - version: 02 - LLM: Kimi - language: 中文 - description: 专门为小学生…

加密算法详解:对称加密、非对称加密、Hash算法

对称加密、非对称加密和哈希算法是信息安全中的三种主要加密技术&#xff0c;它们各自有不同的特点和用途&#xff1a; 对称加密&#xff08;Symmetric Encryption&#xff09; 工作原理&#xff1a;使用相同的密钥进行加密和解密。速度&#xff1a;通常非常快&#xff0c;适…

Elasticsearch:Node.js ECS 日志记录 - Morgan

这是之前系列文章&#xff1a; Elasticsearch&#xff1a;Node.js ECS 日志记录 - Pino Elasticsearch&#xff1a;Node.js ECS 日志记录 - Winston 中的第三篇文章。在今天的文章中&#xff0c;我将描述如何使用 Morgan 包针对 Node.js 应用进行日子记录。此 Morgan Node.j…

包装器 std::function

使用前&#xff0c;包头文件&#xff1a;#include <functional> std::function 是 C标准库 中的一个通用函数包装器&#xff1b; 它可以储存、复制、调用任何可调用的对象&#xff0c;包括&#xff1a;函数指针、成员函数、绑定的成员函数、lambda表达式、仿函数等。 1…

Selenium Grid- 让自动化分布式执行变得可能

什么是 Selenium Grid&#xff1f; Selenium Grid 是 Selenium 的三大组件之一&#xff0c;允许用户同时在不同的机器和系统上测试不同浏览器。 也就是说 Selenium Grid 支持分布式的测试执行。它可以让你的测试用例在一个分布式的执行环境中运行。 由上图可见&#xff0c;测试…

linux:基础知识及命令[图表]

lsof:查找文件 普通文件、目录、进程&#xff08;/proc&#xff09;、输入输出设备&#xff08;/dev&#xff09;、网络字节流socket、链接文件、管道文件 基本用法 lsof&#xff1a;列出所有打开的文件。lsof /path/to/file&#xff1a;列出打开指定文件的所有进程。lsof -…

大话光学原理:4.散射:瑞利、拉曼、米氏和布里渊

这是一缕柔和的光&#xff0c;在空气的舞台上轻盈地跳跃。它悠然自得&#xff0c;在宁静的空间中缓缓前行。然而&#xff0c;一片细薄透明的介质挡住了它的脚步&#xff0c;它毫无预兆地撞上了这片障碍。在这短暂的接触中&#xff0c;它被分解成无数微小的粒子&#xff0c;被迫…

增强现实(AR)与虚拟现实(VR)的区别?

随着科技的飞速发展&#xff0c;增强现实&#xff08;AR&#xff09;与虚拟现实&#xff08;VR&#xff09;技术在各个领域展现出巨大的潜力和应用前景。这两种技术虽然在体验和实现方式上有所不同&#xff0c;但都为用户提供了全新的感知体验。本文将详细解析AR和VR的概念、区…

机器视觉/自然语言/生成式人工智能综合应用实验平台-实训平台-教学平台

AIGC是人工智能1.0时代进入2.0时代的重要标志&#xff0c;MIT 科技评论也将Al合成数据列为2022年十大突破性技术之一&#xff0c;甚至将生成性Al(Generative Al) 称为是AI领域过去十年最具前景的进展。同时&#xff0c;AIGC领域岗位需求数量暴涨。高校方面在人工智能专业与机器…