.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; 序列化:对象转化为文件的过程(字节流) 反序列化:文件(字节 ...
随机推荐
- Asp.net MVC 与 Asp.net Web API 区别
Asp.Net Web API VS Asp.Net MVC 1.Asp.net MVC 是用来创建返回视图(Views)与数据的Web应用,而Asp.net Web API是一种简单轻松地成熟的HT ...
- PS抠图神器:KNOCKOUT 2.0
从优设上转载~~太好用了,保存下来以备不时之需. 本人亲身实践~~先看使用成果~~哈哈~~ 原版图 : 抠过的图: 主要看飘逸的发丝~~~而且全程操作不超过5分钟!! 下载地址: http://vdi ...
- Phalcon 的 bootstrap.php 自动加载完成;非常人性化的设计
<?php /** * Bootstraps the application */ use Phalcon\DI\FactoryDefault as PhDi, Phalcon\Config a ...
- Automatically watermark all uploaded photos (给所有上传的相片加水印)
Hello, This mod automatically watermark all uploaded photos. Price: FREE, enjoy. You will have to ed ...
- 转:Sharethrough使用Spark Streaming优化实时竞价
文章来自于:http://www.infoq.com/cn/news/2014/04/spark-streaming-bidding 来自于Sharethrough的数据基础设施工程师Russell ...
- $cordovaDialogs使用时遇到的问题
1:按照http://ngcordova.com/docs/plugins/dialogs/文档介绍进行安装使用: //标题栏 .controller('TitleCtrl', function($s ...
- Ansible二三事
现在,慢慢测试一下ANSIBLE的功能,不过,总体感觉是,比SALTSTACK运行要慢,好像还有点点不稳定.... 但,在局域环境的表现,还是不错的... ~~~~~~~~~~~~~ 有几个小事要注意 ...
- java四种创建对象的方法
1.用new语句创建对象,这是最常见的创建对象的方法. 2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance ...
- Spring boot将配置属性注入到bean类中
一.@ConfigurationProperties注解的使用 看配置文件,我的是yaml格式的配置: // file application.yml my: servers: - dev.bar.c ...
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
一.getGenericSuperclass()和getActualTypeArguments()基本用法: import java.lang.reflect.ParameterizedType; p ...