.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; 序列化:对象转化为文件的过程(字节流) 反序列化:文件(字节 ...
随机推荐
- android布局1
第二类:属性值必须为id的引用名“@id/id-name” 仅RelativeLayout中有效 android:layout_below 在某元素的下方 android:la ...
- php中的双引号和单引号的区别?
1.单引号里面的字符串直接全部转义,原样输出(即:单引号内部的变量不会被执行) 2.双引号里面的变量会被替换(即:变量会执行) 例如:$name = 'hello';echo "the $n ...
- Delphi-CompareText 函数
函数名称 CompareText 所在单元 System.SysUtils 函数原型 function CompareText(const S1, S2: string): Integer; 函数功能 ...
- (推荐)jquery.pagination.js分页
序言 本来想自己对这个分页使用做一些总结的,但发现大神们已经总结的很好了.所以给推荐一下. 转自:http://www.cnblogs.com/knowledgesea/archive/2013/01 ...
- 判断input checkbox选中状态
$("#IsAdmin").is(':checked') 判断收否选中 返回true 或者false
- Zend Cache的学习和实例
前一段时间,公司让我组织一下关于Zend Cache的培训. 培训的具体内容有: 前端core缓存 前端Output缓存 前端Function缓存 前端Class缓存 前端File缓存 前端Page缓 ...
- Asteroids
http://poj.org/problem?id=3041 #include<cstdio> #include<cstring> #include<algorithm& ...
- h.264 fast,1/2,1/4像素运动估计与插值处理
Hadamard Transform 在1/2,1/4像素运动估计这一阶段中,对于像素残差,可以选择采用哈达玛变换来代替离散余弦变换进行高低频的分离. 优点:哈达玛矩阵全是+1,-1,因此只需要进行加 ...
- DC DC電路電感的選擇
注:只有充分理解電感在DC/DC電路中發揮的作用,才能更優的設計DC/DC電路.本文還包括對同步DC/DC及異步DC/DC概念的解釋. DCDC電路電感的選擇 簡介 在開關電源的設計中電感的設計為 ...
- 【递归】Vijos P1132 求二叉树的先序序列(NOIP2001普及组第三题)
题目链接: https://vijos.org/p/1132 题目大意: 给定二叉树的中序和后序遍历,求该二叉树先序遍历. 题目思路: [递归] 这题妥妥递归. 二叉树先序根左右,中序左根右,后序左右 ...