C#面:简单介绍 序列化 和 反序列化

序列化:

是将对象转换为可保持或可传输的形式的过程。

.NET 具有以下序列化技术:

  • 二进制序列化保持类型保真,这对于多次调用应用程序时保持对象状态非常有用。 例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。 您可以将对象序列化到流、磁盘、内存和网络等。 远程处理使用序列化,“按值”在计算机或应用程序域之间传递对象。
  • XML 和 SOAP 序列化只序列化公共属性和字段,并且不保持类型保真。 当您希望提供或使用数据而不限制使用该数据的应用程序时,这一点非常有用。 由于 XML 是开放式的标准,因此它对于通过 Web 共享数据来说是一个理想选择。 SOAP 同样是开放式的标准,这使它也成为一个理想选择。
  • JSON 序列化只序列化公共属性,并且不保持类型保真。 JSON 是开放式的标准,对于通过 Web 共享数据来说是一个理想选择。

用到的类:

System.Runtime.Serialization
包含可用于序列化和反序列化对象的类。

System.Xml.Serialization
包含可用于将对象序列化为 XML 格式的文档或流的类。

System.Text.Json
包含可用于将对象序列化为 JSON 格式的文档或流的类。

反序列化:

是将流转换为对象的过程。

这两个过程一起保证能够存储和传输数据。

注意:

  1. 如果一个类可以序列化,它的子类和包含的各成员对象不一定都可以序列化。如果一个类可以序列化,但其子类或包含的成员对象不满足序列化条件,那么在序列化过程中可能会抛出异常。因此,在设计可序列化的类继承结构时,需要确保所有相关的类都满足序列化条件。
  2. 若要忽略单个属性,请使用 [JsonIgnore] 特性。

示例: 

JSON序列化示例:

public class Person
{public string? Name { get; set; }public int Age { get; set; }public DateTimeOffset Date { get; set; }
}
internal class Program
{static void Main(string[] args){//创建一个Person类的对象Person person = new Person{Name = "大毛",Age = 10,Date = DateTime.Now};//序列化为JSONstring jsonString = JsonSerializer.Serialize(person);Console.WriteLine(jsonString);//{"Name":"\u5927\u6BDB","Age":10,"Date":"2024-03-03T17:01:29.4062255+08:00"}}
}

JSON反序列化示例:

public class Person
{public string? Name { get; set; }public int Age { get; set; }public DateTimeOffset Date { get; set; }
}
internal class Program
{static void Main(string[] args){string jsonString = @"{""Name"":""\u5927\u6BDB"",""Age"":10,""Date"":""2024-03-03T17:01:29.4062255+08:00""}";Person? person = JsonSerializer.Deserialize<Person?>(jsonString);Console.WriteLine($"姓名:{person?.Name}");Console.WriteLine($"年龄:{person?.Age}");Console.WriteLine($"创建时间:{person?.Date}");//姓名: 大毛//年龄:10//创建时间:2024 - 03 - 03 17:01:29 + 08:00

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

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

相关文章

Linxu自动化构建工具make/Makefile究竟时什么?

Linxu自动化构建工具make/Makefile究竟时什么&#xff1f; 一、简介二、makefile文件制作&#xff08;简洁版&#xff09;2.1 源文件2.2 makefile如何制作2.2.1 依赖关系、依赖方法2.2.3 伪目标&#xff08;清理文件资源&#xff09; 三、make/Makefile自动化原理3.1 伪目标为什…

SpringBoot+Vue实现el-table表头筛选排序(附源码)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;在笑大学牲 &#x1f39f;️个人主页&#xff1a;无所谓^_^ ps&#xff1a;点赞是免费的&#xff0c;却可以让写博客的作者开心好几天&#x1f60e; 前言 后台系统对table组件的需求是最常见的&#xff0c;不过element-ui的el…

Grpc项目集成到java方式调用实践

背景&#xff1a;由于项目要对接到grcp 的框架&#xff0c;然后需要对接老外的东西&#xff0c;还有签名和证书刚开始没有接触其实有点懵逼。 gRPC 是由 Google 开发的高性能、开源的远程过程调用&#xff08;RPC&#xff09;框架。它建立在 HTTP/2 协议之上&#xff0c;使用 …

D7805 正电压稳压电路应用——体积小,成本低,性能好

D7805 构成的 5V 稳压电源为输出电压5V&#xff0c;输出电流 1000mA 的稳压电源它由滤波电容 C1,C3,防止自激电容 C2、C3 和一只固定三端稳压器&#xff08;7805&#xff09;后级加 LC 滤波极为简洁方便地搭成&#xff0c;输入直流电压范围为 7~35V&#xff0c;此直流电压经过D…

yolov8-更换卷积模块-ContextGuidedBlock_Down

源码解读 class ContextGuidedBlock_Down(nn.Module):"""the size of feature map divided 2, (H,W,C)---->(H/2, W/2, 2C)"""def __init__(self, nIn, dilation_rate2, reduction16):"""args:nIn: the channel of input fea…

Hack The Box-Bizness

目录 信息收集 nmap dirsearch WEB Get shell 提权 get user flag get root flag 信息收集 nmap 端口扫描┌──(root㉿ru)-[~/kali/hackthebox] └─# nmap -p- 10.10.11.252 --min-rate 10000 -oA port Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-04 1…

实测VLLM的加速效果

为了测试vllm的并行加速效果&#xff0c;采用同样的5个提问&#xff0c;编写两个不同的python脚本&#xff0c;分别是compare_vllm.py和compare_chatglm3.py&#xff0c;其中compare_vllm.py采用vllm加速。 服务器参数&#xff1a; 操作系统ubuntu 22.04CPUi7 14700k内存dd5 …

hive中常见参数优化总结

1.with as 的cte优化&#xff0c;一般开发中习惯使用with as方便阅读&#xff0c;但如果子查询结果在下游被多次引用&#xff0c;可以使用一定的参数优化手段减少表扫描次数 默认set hive.optimize.cte.materialize.threshold-1;不自动物化到内存&#xff0c;一般可以设置为 se…

力扣 第 387 场周赛 解题报告 | 珂学家 | 离散化树状数组 + 模拟场

前言 整体评价 手速场模拟场&#xff0c;思路和解法都蛮直接的。 所以搞点活 如果T2&#xff0c;如果不固定左上角&#xff0c;批量查询某个点为左上角&#xff0c;求满足总和 ≤ k \le k ≤k的子矩阵个数 如果T2&#xff0c;如果不固定左上角&#xff0c;求总和 ≤ k \le k…

Spring的Bean的生命周期 | 有图有案例

Spring的Bean的生命周期 Spring的Bean的生命周期整体过程实例化初始化服务销毁循环依赖问题 完整生命周期演示 Spring的Bean的生命周期 Spring Bean的生命周期&#xff1a;从Bean的实例化之后&#xff0c;通过反射创建出对象之后&#xff0c;到Bean称为一个完整的对象&#xf…

EXPLAIN:mysql 执行计划分析详解

目录 EXPLAIN命令 查看执行计划 分析执行计划 优化查询 EXPLAIN中的 type 列类型 在MySQL中&#xff0c;你可以使用EXPLAIN命令来生成查询的执行计划。EXPLAIN命令可以显示MySQL如何使用键来处理SELECT和DELETE语句&#xff0c;以及INSERT或UPDATE语句的WHERE子句。这对于…

SRS Stack提供的鉴权、私人直播间、多平台转播、录制等高级功能的具体使用方法是什么?

SRS Stack提供的鉴权、私人直播间、多平台转播、录制等高级功能的具体使用方法是什么&#xff1f; 鉴权功能&#xff1a;SRS Stack支持通过系统配置中的OpenAPI获取Bearer鉴权&#xff0c;并可以尝试HTTP API。用户可以通过点击网页上的按钮请求HTTP API&#xff0c;或者使用cu…

快上车:什么是人工智能?人工智能和普通程序的区别

什么是人工智能&#xff1f; 虽然AI历史很悠久&#xff0c;上个世纪50年代就有各种概念&#xff0c;但是发展很慢。第一次对人类的冲击就是1997年IBM深蓝击败国际象棋世界冠军&#xff0c;引起了人们的广泛关注&#xff0c;之后又销声匿迹。突然间2016人工智能alphaGO战胜了围…

具身智能计算系统,机器人时代的 Android | 新程序员

【导读】具身智能作为一种新兴的研究视角和方法论&#xff0c;正在刷新我们对智能本质及其发展的理解&#xff1a;传统的 AI 模型往往将智能视为一种独立于实体存在的抽象能力&#xff0c;而具身智能则主张智能是实体与其环境持续互动的结果。 本文深度剖析了具身智能计算系统…

【CSS】初学了解Grid布局

目录 什么是Grid布局如何开始使用Grid布局Grid容器的属性Grid项目的属性举个例子 什么是Grid布局 Grid布局是一种二维的布局系统&#xff0c;它允许我们在水平和垂直方向上同时控制网格中的项目位置。通过将页面划分为行和列&#xff0c;我们可以轻松地创建出复杂的布局结构&a…

程序员如何选择职业赛道?

一、自我评估与兴趣探索 程序员选择职业赛道时&#xff0c;可以考虑以下几个关键因素&#xff1a; 1、兴趣与热情&#xff1a;首先要考虑自己的兴趣和热情&#xff0c;选择符合个人喜好和激情的领域&#xff0c;能够激励自己持续学习和进步。 2、技术能力&am…

2.python72变笔记(自用未修改版)

以前写的python笔记 1.二进制与字符编码 #8bit&#xff08;位&#xff09;1byte&#xff08;字节&#xff09; #1024byte 1KB 千字节 #1024KB 1MB 兆字节 #1024MB 1TB 太字节 print(chr(0b100111001010000)) print(ord("陈")) #ord 十进制 #无论英语还是汉语在计算…

mysql5.7配置主从

原理&#xff1a; MySQL主从复制的工作原理如下:1. 主服务器产生Binlog日志当主服务器的数据库发生数据修改操作时,如INSERT、UPDATE、DELETE语句执行,主服务器会记录这些操作的日志信息到二进制日志文件中。2. 从服务器读取Binlog日志 从服务器会向主服务器发送请求,主服务器把…

微信小程序开发学习笔记《18》uni-app框架-网络请求与轮播图

微信小程序开发学习笔记《18》uni-app框架-网络请求 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、下载网络请求包 这个包是以前黑马程序员老师写的一个包&#xff0c;跟着课程学习&#x…

Open3D(C++) 指定点数的体素滤波

目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法过程 对于数据量较大的点云,在后期进行配准时会影响计算效率。而体素格网…