.net 中序列化和反序列化的使用
序列化的目的:将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
序列化
序列化分为JSON 序列化,XML序列化,二进制序列化
准备工作,新建一个Person类
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
该类用[Serializable]标签表示为可序列化
准备工作,创建该类的示例
Person p = new Person() { Name = "张三", Age = };
一,JSON序列化和反序列化
1,JSON序列化
/*json序列化*/
var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var str = javaScriptSerializer.Serialize(p);
结果:
2,JSON反序列化
/*json 反序列化*/
var jsonObject = javaScriptSerializer.Deserialize(str, p.GetType());
Console.WriteLine((jsonObject as Person).Name);
Console.Read();
3,JSON序列化还有一种方式
/*json序列化*/
DataContractJsonSerializer dcjs = new DataContractJsonSerializer(p.GetType());
MemoryStream ms = new MemoryStream();
dcjs.WriteObject(ms, p);
var s = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
/*反序列化*/
MemoryStream ms1 = new MemoryStream(Encoding.UTF8.GetBytes(s));
var objPerson = dcjs.ReadObject(ms1) as Person;
使用这个类的时候,会在序列化的JSON字符串带有 K__BackingFideId 前缀
如下图;
当Person 类中没有[Serializable] 标签的时候一切都恢复正常了
二,XML序列化和反序列化
/*xml序列化*/
FileStream fsXml = new FileStream("1.xml", FileMode.Create, FileAccess.ReadWrite);
System.Xml.Serialization.XmlSerializer xsl = new XmlSerializer(p.GetType());
xsl.Serialize(fsXml, p);
fsXml.Dispose(); /*xml反序列化*/
FileStream fsDeXml = new FileStream("1.xml", FileMode.Open, FileAccess.ReadWrite);
var Xmlobj = xsl.Deserialize(fsDeXml);
fsDeXml.Dispose();
三,二进制序列化和反序列化
/*二进制序列化*/
FileStream fsBin = new FileStream("2.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fsBin, p);
fsBin.Dispose(); /*二进制反序列化*/
FileStream fsBinDes = new FileStream("2.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
BinaryFormatter bfDes = new BinaryFormatter();
var binObject = bfDes.Deserialize(fsBinDes);
.net 中序列化和反序列化的使用的更多相关文章
- Java 中序列化与反序列化引发的思考?
java 中序列化指从对象转变为 二进制流的过程中需要进行序列化,而反序列化指二进制流转换为java 对象.那么有的时候java 存储到数据库不需要序列化, 而计算机系统本质存储的就是二进制文件,数据 ...
- php中序列化与反序列化
解析PHP多种序列化与反序列化的方法 序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更 ...
- JAVA中序列化和反序列化
一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失(java回收机制)但如果我们想把某些对象(因为是对象,所以有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,可以在程序再次运 ...
- php中序列化与反序列化在utf8和gbk编码中测试
在php中如果我们统一编码是没有什么问题了,但是很多朋友会发现一个问题就是utf8和gbk编码中返回的值会有所区别: php 在utf8和gbk编码下使用serialize和unserialize互相 ...
- java 打印流 递归复制子文件子文件夹 不同编码文件复制到同一文件中 序列化流反序列化流
package com.swift.jinjie; import java.io.BufferedInputStream; import java.io.File; import java.io.Fi ...
- java开发中序列化与反序列化起到的作用
基本概念: 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象. 这两个过程结合起来,能够轻松地存储和数据传输. 特别在网络传输中,它的作用显得尤为重要.我们 ...
- Java 中序列化与反序列化
一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ...
- JAVA中序列化和反序列化中的静态成员问题
关于这个标题的内容是面试笔试中比较常见的考题,大家跟随我的博客一起来学习下这个过程. ? ? JAVA中的序列化和反序列化主要用于: (1)将对象或者异常等写入文件,通过文件交互传输信息: (2)将对 ...
- c#中序列化和反序列化的理解
using System.IO;using System.Runtime.Serialization.Formatters.Binary; 序列化:对象转化为文件的过程(字节流) 反序列化:文件(字节 ...
随机推荐
- sublime2开发Python的编码问题
在sublime2文本编辑器直接开发python程序会出现错误 Traceback (most recent call last): File ".\sublime_plugin.py&qu ...
- js中定义变量加var与不加var的区别?
var 不一定是用来定义局部变量的 jscript的全局变量和局部变量的分界是这样的: 过程体(包括方法function,对象Object o ={})外的所有变量不 ...
- Gnuradio 学习
8月份就把usrp买过来了,不过由于一直比较忙, 也没怎么弄. 这几天准备学习学习,暂时也不知道能干些啥.不管怎么样先按教程走一遍,熟悉熟悉设备也是好的吧. 首先去Ettus 下载了一个官方指导,一步 ...
- ubuntu 的远程桌面
好久没有弄ubuntu 丢人的啊,先安装了个服务器版,发现好多命令都忘记了,命令行下根本搞不懂 又安装了个桌面版...但是服务器远程么,putty还是搞的头大,又乱码,有各种文件传输. 还好记得以前用 ...
- IOS 笔试
iOS基础教程之Objective-C:Objective-C笔试题 作者:蓝鸥科技 发布于:2012-12-14 14:38 Friday 分类:iOS中级-OC开发 iOS基础教程之Objecti ...
- codevs 3269 混合背包
题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体 ...
- Topk引发的一些简单的思考
软件工程课程的一个题目:写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来.文本文件大约是30KB~300KB大小. 首先说一下这边的具体的实现都是在linux上实现的. ...
- 解决octave for windows安装包无法通过SourceForge下载的问题
近期SourceForge访问不了,可以通过访问SourceForge的ftp镜像ftp://sourceforge.nchc.org.tw/进行下载: ftp下载工具可以使用FileZilla,可在 ...
- (未解决)问题记录ionic android 签名之后安装到手机上点击运行出现闪退,不签名运行正常
Log日志如下: - ::): error opening trace ) - ::): FATAL EXCEPTION: main - ::): java.lang.RuntimeException ...
- 使用MFC开发有十多年了,结合自身的体会,随便说几句(不能样样都依赖别人,C体系的人,绝对不怕人踢馆)
挺长时间了吧,这个帖子还没沉下去,使用MFC开发有十多年了,结合自身的体会,随便说几句:1.MFC是一个C++的基础类库,封装了绝大多数的API函数,主要是用来创建带UI的应用程序,服务端程序或着不带 ...