序列化对象(.NET中)

.NET序列化 serializable,反序列化 Newtonsoft XmlSerializer web 请求服务器,是不能传递跟客户端那种{传递任意类型的数据【类】等},只能传递字符串、或字节流等,反正传递过去不能 .XXX成员这样方式的,序列化到服务器端,反序列化,服务器需要对应的类型的。XML/JSON序列化不受编程语言限制,C#使用XML/JSON序列化后的数据JAVA可以很容易的按照XML或JSON的格式反序列化得到所需数据。如果对象标记为 Serializable,则该对象将被自动序列化,并从一个应用程序域传输至另一个应用程序域,然后。:与序列化相反,将流转换为对象的过程。 阅读详情

序列化对象(.NET中)

其实是个很老的话题,有的时候都觉得这不算个问题.不过好久没发表东西了

随便写点.不过说实话,现在很多网络中的例子是beta版里的,我提供的是正式

版的.因此我想还是有一定价值的.

首先什么是序列化呢?简单的说就是把对象实例存储到磁盘中的方法.因此序列

化过程就是存储对象的状态.那就是说把成员数据写如磁盘同时保持原有结构.

那么针对序列化过程,同样也存在反序列化.我想大家已经猜到了,就是吧已经

序列化的对象在读出来.思想很简单,是吧,那么我再来举一个小的例子,力图吧

一个完整的序列化过程描述清楚.由于本人对C#了解的更加习惯.所以例子我也是

使用C#写的,但是本质上.NET使用的是同一套Framework 也是同一套CTS并且都

依照同样的编码约定,因此是一致的,

那么现在编码开始阶段我先来介绍两个名称空间给大家,因为要在编码过程中用到.

System.Runtime.Serialization
System.Runtime.Serialization.Formatters.Binary

关于这两个名称空间请大家参考MSDN:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemRuntimeSerialization.htm


ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemRuntimeSerializationFormattersBinary.htm

例子如下:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public class SerialTest
{

 public void SerializeNow()
 {
  YarshrayToSerialize Y=new YarshrayToSerialize();
 
  Stream s=File.Open("temp.dat",FileMode.Create);
  BinaryFormatter b=new BinaryFormatter();
  b.Serialize(s,Y);
  s.Close();
 }

 public void DeSerializeNow()
 {
  YarshrayToSerialize Y=new YarshrayToSerialize();
 
  Stream s=File.Open("temp.dat",FileMode.Open);
  BinaryFormatter b=new BinaryFormatter();
  Y=(YarshrayToSerialize)b.Deserialize(s);
  Console.WriteLine("Name is:  "+Y.name);
  Console.WriteLine("Age is:  "+Y.age);
  Console.ReadLine();
  s.Close();
 }

 public static void Main(string[] s)
 {

  SerialTest st=new SerialTest();
  st.SerializeNow();
  st.DeSerializeNow();

 }

}
[Serializable()]
public class YarshrayToSerialize
{
 public int age=21;
 public string name="yarshray";

}


最后输出结果:

Name is:  yarshray
Age is:  21


那么我们来看这个例子.我们重点要看那里?细心的朋友可能已经看到[Serializable()]

这个特性了.我们知道,特性在.NET中是用来描述对象或方法,要具备那些功能的.[Serializable()]

这个特性就表明了该对象具备序列化功能.(详细参考:MSDN

ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemSerializableAttributeMembersTopic.htm)

那么下面我再来说一下序列化的步骤.我首先定义了一个类叫做YarshrayToSerialize一看就知道

把我自己的信息序列化.我在这个类上面加入了特性[Serializable()],要告诉RUNTIME我这个类

是要在运行时进行序列化的.这里我要提一点,如果你不要[Serializable()]这个特性那么编译是

可以通过的.可是运行时就会抛出一个异常.这就说明序列化是在运行其间执行的操作.其实你从

名称空间也可以看的出来.然后我在我的SerialTest类中,读写磁盘.把信息存储到一个叫做temp.dat

的文件中,当然这个文件是我自定义的,你也可以定义其它的.这里用到了流对象和文件对象的操作.

这是IO操作.不在本文范围内,如果你还不清楚,可以参考.Net的IO操作.在主函数中我直接调用了

两个方法.一个是序列化,一个是反序列化.这里重点代码就是BinaryFormatter.Serialize(s,Y)

和  BinaryFormatter.Deserialize(s)这个方法返回的是一个object因此我在这里进行了一次

拆箱操作(对于拆箱请不要和强制类型转化及这个对象虚指针放在一个概念.当然这也不在本文

讨论范围内).

那么接下来,我要说一下序列化对象的基本步骤,因为我上面的只是一个简单的例子,如果复杂的

操作它的基本步骤是不会变的.这里我觉得应该分为四个步骤来进行:

1.首先我要创建对象实例(也就是这一句YarshrayToSerialize Y=new YarshrayToSerialize();

把类实例化为对象)其目的就是为了吧这个对象的状态保存到磁盘中

2.需要创建一个流对象来读写文件对象

3.需要创建一个具有序列化功能的对象(这里我用到的是BinaryFormatter当然如果你序列化

就需要XmlFormatter)

4.那很显然,就是把对象实例通过serialize方法进行序列化保存.

反序列化和这个类似,只是把serialize方法变为这个Deserialize方法.那么步骤是相同的.

你可以结合上面的代码来看看.那么关于序列化的话题我就讲到这里,那么复杂的类操作基本

步骤是一样.你只要加入属性和方法等就可以了.

最后谈点题外话,序列化技术已经被多种FrameWork封装,并提供相应的功能调用.这作为对象

的永久保存的作用是非常明显的.当然你在反序列化过程中必须要支持动态创建否则就没意义

了嘛.

C#使用Json.NET进行对象的序列化与反序列化 在C#开发中,我们经常需要将对象转换为JSON格式进行传输或存储,以及将JSON字符串转换回对象。在这方面,Json.NET是一个强大且广泛使用的库,它提供了简单且灵活的方法来实现对象的序列化和反序列化。本文将介绍如何使用Json.NET进行对象的序列化和反序列化,并提供相应的源代码示例。 阅读详情

相关推荐

VB.NET 对象序列化剧本概念剖析

对象序列化是一种常见的编程概念,它允许将对象转换为可以在网络上传输或在磁盘上存储的格式。本文将详细介绍 VB.NET 中的对象序列化概念,并提供相应的源代码示例。请注意,本文提供的示例代码供参考,实际应用中可能需要根据具体需求进行调整和扩展。在进行对象序列化时,还需注意版本兼容性和安全性等问题,确保数据的正确性和安全性。在将对象序列化和反序列化的过程中,需要注意安全性。当对已序列化的对象进行反序列化时,必须确保对象的定义与序列化时的定义相匹配。要使一个类可序列化,需要将其标记为可序列化。

DeFunction的博客 221

RM57L843引脚复用与MibADC、N2HET实战配置指南

在嵌入式系统设计中,引脚复用(Pin Multiplexing)是连接微控制器内部丰富外设与外部电路的关键技术,它通过多路选择器将一个物理引脚分配给多个功能模块,由特定寄存器控制。其核心价值在于高效利用有限的芯片引脚资源,解决外设冲突,是释放高性能MCU潜力的基础。对于实时性要求极高的应用,如电机控制与汽车电子,多缓冲模数转换器(MibADC)和增强型高端定时器(N2HET)的协同工作至关重要。MibADC的多缓冲架构支持确定性同步采样,能显著减轻CPU中断负担,而N2HET作为可编程定时协处理器,能生成复

weixin_34408624的博客 498

深入解析.NET对象序列化与反序列化技术

命名空间是.NET框架中处理序列化的核心部分,它提供了各种类型、接口和枚举,用于定义如何序列化对象,以及如何控制序列化的过程和行为。此命名空间下包含的类和接口对于任何需要进行数据持久化或跨层通信的.NET应用程序都是至关重要的。在命名空间中,有几个关键的类和接口需要关注::使用数据契约进行序列化和反序列化的类。:与相似,但在序列化时会包含.NET类型信息。:一个接口,允许对象自定义自己的序列化行为。和:在接口实现中使用,提供有关序列化的数据和上下文信息。

weixin_31459297的博客 680

.NET 中的对象序列化

原文出处:http://www.microsoft.com/china/MSDN/library/archives/library/dndotnet/html/objserializ.aspPiet ObermeyerMicrosoft Corporation2001 年 8 月 摘要:为什么要使用序列化?最重要的两个原因是:1.      将对象的状态保存在存储媒体中

我的生活,我的BLOG 987

[Serializable]在C#中的作用-NET 中的对象序列化 - WDDAVID'S BLOG - 博客园.pdf

在C#中的作用-NET 中的对象序列化,了解序列化的意义及相关内容

Serializable在C#中的作用.NET 中的对象序列化

详细讲解了C#中关于对象序列化的知识,包括基本序列化、选择序列化、自定义序列化;对于了解在C#中如何进行对象的序列化有价值

[Serializable]在C#中的作用-NET 中的对象序列化

简介序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。 在面向对象的环境中实现序列化机制时,必须在易用性和灵活性之间进行一些权衡。只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行。例如,简单的二进制...

dd_dd1234的博客 1067

继电器的选型规范

触点是继电器中最重要的结构件,触点的使用寿命受触点材料、触点上的电压及电流值(特别是接通时及断开时的电压、电流波形)、负载种类、切换频率、环境情况、接触形式、触点回跳现象等的影响,触点失效多以触点的材料转移、粘连、异常消耗、接触电阻增大等故障现象出现,使用时需要注意。为了稳定工作, DC 型继电器的线圈两端所加电压推荐使用波纹变化率小于±5%的线圈额定电压,否则继电器会工作不稳定,引起触点的粘接或异常损耗,特别是在继电器的驱动电路上连接有电动机、螺线管、变压器等器件时,这种情况更为明显。

qq_43416206的博客 1882

在.NET中实现对象序列化

在.NET中实现对象序列化    自从有了XML以后,跨系统的数据交换变得越来越简单。.NET更把XML做为底层数据交换的基础,并在.NET框架中提供了强大的类库以增强XML的编程能力。这些类包含在System.Xml命名空间中。在跨系统的数据交换中,对象的序列化与反序列化是重中之重。.NET为此专门提供了一个System.Xml.Serialization命名空间用于对象的序列化。   要了

popkiler的专栏 838

双硬盘下Ubuntu 16.04与Win10双系统的安装

之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊...   基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.csdn.net/weixin_40308540/article/details/80157444   区别:双硬盘和单硬盘的区别是什么呢?...

不吃包子 1124

vivado安装空间与依赖要求:入门须知要点

准备安装Vivado时,需重点关注系统空间和依赖环境的配置。结合vivado安装教程,详细说明最低磁盘要求、内存配置及操作系统兼容性,帮助新手快速搭建开发环境,避免常见安装失败问题。

weixin_34725745的博客 1574

NET 中的对象序列化

NET 中的对象序列化Piet ObermeyerMicrosoft Corporation2001 年 8 月摘要:为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域。例如,序列化可用于在 ASP.NET 中保存会话状态,以及将对象复制到 Windows 窗体的剪贴板中。它还可用

Never going back 650

你的Wi-Fi总断网?可能是DHCP租约到期惹的祸!手把手教你用Windows/路由器设置永久IP或延长租期

本文深入解析家庭Wi-Fi频繁断网的常见原因——DHCP租约到期问题,并提供Windows和路由器设置永久IP或延长租期的详细教程。通过对比静态IP配置与延长租期两种方案,帮助用户有效解决网络不稳定问题,特别适合游戏玩家和远程工作者优化家庭网络环境。

weixin_29305313的博客 1430

(转).NET对象的XML序列化和反序列化

        虽说是转的,不过之前还是说点自己的感受.最近被朋友拉去参加一个面向代理的程序设计竞赛,挺有意思的,类似面向服务,不过要求使用.NET平台,虽然以前用过,不过对.NET的理解实在没法跟JAVA比,不过越用越发现,落后的东西各有各的长处,先进的东西都是一样一样的,哈哈.真没想到,连JAXB在.NET里都有,本来还打算自己写个类似的类库呢,顿时对.NET好感倍增,现在JDBC也学.NET

dongchengok的专栏 1295

用Omniverse Kit开发第一个USD插件:从环境配置到实战案例(Python 3.7版)

本文详细介绍了如何使用NVIDIA Omniverse Kit和Python 3.7开发第一个USD插件,涵盖从环境配置到实战案例的全过程。通过创建可实时同步材质属性的USD插件,开发者可以快速掌握Omniverse开发框架,提升3D内容创作效率。

x8y9z0的博客 587

【图像去噪】论文复现:超分思想助力荧光显微图像自监督去噪!N2SR的Pytorch源码复现,图文详细教程跑通源码,框架结构原理示意图与代码对应,注释详细,补充三个实用功能代码!

论文题目:Noise2SR: Learning to Denoise from Super-Resolved Single Noisy Fluorescence Image —— Noise2SR:从超分辨率单噪声荧光图像中学习去噪【图像去噪】论文精读:Noise2SR: Learning to Denoise from Super-Resolved Single Noisy Fluorescence Image(N2SR)N2SR框架结构和原理都比较简单,创新点是加入超分,有很多类似的自监督框架;

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 632

.NET对象的XML序列化和反序列化

 一概述.NET Framework为处理XML数据提供了许多不同的类库。XmlDocument类能让你像处理文件一样处理xml数据,而XmlReader、XmlWriter和它们的派生类使你能够将xml数据作为数据流处理。XmlSerializer则提供了另外的方法,它使你能够将自己的对象串行化和反串行化为xml。串行化数据既能够让你像处理文件一样对数据进行随机处理,同时又能跳过你不

906

21、深入了解SELinux安全系统与/proc文件系统

本文深入探讨了SELinux安全系统与/proc文件系统的原理及实际应用。详细介绍了SELinux的安全上下文、域转换、运行模式、角色管理以及策略查看工具seinfo的使用;同时解析了/proc文件系统的结构与功能,涵盖进程信息查看、系统资源监控及性能优化方法。结合SELinux与/proc的协同应用,提供了系统问题排查流程与安全管理最佳实践,帮助用户提升Linux系统的安全性与稳定性。

ik678901234的博客 62

SharpSerializer:让.NET对象序列化更简单

SharpSerializer:让.NET对象序列化更简单 在.NET开发中,对象序列化是一个常见的需求,无论是将对象状态保存到文件、数据库还是进行网络传输,序列化都是必不可少的步骤。今天,我们就来介绍一个开源的.NET序列化库——SharpSerializer,它以其简单易用和强大的序列化能力,吸引了不少开发者的关注。 项目介绍 SharpSerializer是一个开源的.NET库,支持XML和...

gitblog_00672的博客 677

YOLOv8结合GhostNet实现轻量化目标检测:模型设计与性能评测

GhostNet系列的核心是**“幽灵特征图(Ghost Feature Map)”** 概念:通过简单的线性变换(如深度卷积)生成“幽灵特征”,这些特征与原始特征融合后,能以极低的计算成本带来丰富的语义信息。为了突出GhostNet系列的必要性,设计消融实验:分别测试“仅主卷积”“仅幽灵卷积”“GhostNet(主卷积+幽灵卷积)”三种方案的性能,用数据证明“幽灵特征”的不可替代性。简单来说,引入GhostNet系列的YOLOv8,既能体现你的技术深度,又能让毕设的“落地性”大幅提升。

m0_71589036的博客 116

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 留言薄+留言薄==BBS
下一篇: C#中多重继承
yarshray
博客等级 码龄25年 72粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值