C#序列化与反序列化。
序列化介绍:
把对象用一种新的格式来表示。
系列化只序列化数据。
序列化不建议使用自动属性
为什么要序列化:
将一个复杂的对象转换流,方便存储与信息交换。
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "张三";
person.Age = ;
// json 序列化 变成字符串
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
string msg = javaScriptSerializer.Serialize(person);
Console.WriteLine(msg);
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
二进制序列化:
就是将对象变成流的过程,把对象变成byte[ ]。
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "张三";
person.Age = ;
// 二进制序列化注意点:
//1、被序列化对象类型必须标记为可序列化
//2、被序列化的所有父类也必须标记为可序列化
//3、被序列化的对象的类型中字段的类型也要标记 //二进制序列化步骤:
//1、创建序列化器
BinaryFormatter bf = new BinaryFormatter();
// 1.1 创建一个文件流。
using(FileStream fsWrite =new FileStream("person.bin", FileMode.Create))
{
//2、开始执行序列化。
bf.Serialize(fsWrite, person);
}
Console.WriteLine("序列化完毕"); }
}
[Serializable]
class Person:Animal
{
public string Name { get; set; }
public int Age { get; set; }
public Car BenChi { get; set; }
}
[Serializable]
public class Animal
{
public void Eat()
{
Console.WriteLine("eat food...");
}
}
[Serializable]
public class Car
{ }
反序列化:
class Program
{
static void Main(string[] args)
{
//二进制反序列化注意的问题:
//1、必须获取被系列化的对象的类型所在的程序集。因为它要根据序列化文件还原该对象,而序列化文件中
//只包含数据信息,而不包含其类型的相关信息、方法相关信息等,这些信息在对象序列文件中都没有。 //步骤:
//1、创建序列化器。
BinaryFormatter bf = new BinaryFormatter();
//1.1 创建读取文件的文件流。
using(FileStream fsRead=new FileStream("person.bin", FileMode.Open))
{
//2、执行反序列化。
object obj = bf.Deserialize(fsRead);
Person person = (Person)obj;
Console.WriteLine(person.Name);
}
Console.WriteLine("ok"); }
}
[Serializable]
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
练习:添加对象到array list中,进行序列化和反序列化。
序列化:
class Program
{
static void Main(string[] args)
{
ArrayList arrayList = new ArrayList();
arrayList.Add("张三");
arrayList.Add();
//创建序列化容器
BinaryFormatter bf = new BinaryFormatter();
//创建文件流
using(FileStream fs=new FileStream("txt.txt", FileMode.Create))
{
//执行序列化
bf.Serialize(fs, arrayList);
}
Console.WriteLine("序列化完毕"); }
}
反序列化:
class Program
{
static void Main(string[] args)
{
//创建序列化容器
BinaryFormatter bf = new BinaryFormatter();
//创建读取的文件流
using(FileStream fs=new FileStream("txt.txt", FileMode.Open))
{
//执行反序列化
object obj= bf.Deserialize(fs);
ArrayList arrayList = (ArrayList)obj;
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
} }
}
C#序列化与反序列化。的更多相关文章
- C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- Java 序列化与反序列化
1.什么是序列化?为什么要序列化? Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程. 我们都知道,在进行浏览器访问的时候,我们看到的文本.图片.音频. ...
- C#中怎样实现序列化和反序列化
我们想要将数据进行持久化的操作的话,也就是将数据写入到文件中,我们在C#中可以通过IO流来操作,同时也可以通过序列化来操作,本人是比较推荐使用序列化操作的 因为我们如果想要将一个对象持久化到文件中 如 ...
- Java序列化与反序列化
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...
- XPatchLib 对象增量数据序列化及反序列化器 For .Net
在日常的软件开发和使用过程中,我们发现同一套系统的同一配置项在不同的客户环境中是存在各种各样的差异的.在差异较为分散时,如何较好的管理这些差异,使得维护过程能够更加安全和快速,一直在这样那样的困扰着开 ...
- c# Json 自定义类作为字典键时,序列化和反序列化的处理方法
一般情况下,Newtonsoft.Json.dll 对 Dictionary<int,object>.Dictionary<string,object>等序列化与反序列化都是成 ...
- java 对象序列化与反序列化
Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ...
- 序列化,反序列化和transient关键字
一.序列化和反序列化的概念 序列化:指把java对象转换为字节序列的过程. 反序列化:指把字节序列恢复为java对象的过程. 对象的序列化主要有两种用途: 1) 把对象的字节序列保存到硬盘上,通常存放 ...
- C#对象序列化与反序列化zz
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...
随机推荐
- javascript小括号、中括号、大括号学习总结
作为一名编程人员,和括号打交道是必不可少的.你可知道在不同的上下文中,括号的作用是不一样的,今天就让我们简单总结下javascript小括号.中括号.大括号的用法. 总的来说,JavaScript中小 ...
- 只要一行代码求一串字符中某字符(串)出现次数,c#
这里只要一行代码就行. static void Main(string[] args) { string str = "qwerwqr;sfdsfds;fdfdsf;dfsdfsdf;dsf ...
- 【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系
从作用机制和性质上看待methods,watch和computed的关系 图片标题[原创]:<他三个是啥子关系呢?> 首先要说,methods,watch和computed都是以函数为基础 ...
- 【UOJ117】 欧拉回路(欧拉回路)
传送门 UOJ Solution 无解 t=1,无向图,当且仅当\(\exists i \ \ in_i \ne out_i\) t=2,有向图,当且仅当\(\exists i \ \ in_i是奇数 ...
- DOM1级问题与DOM2级事件
前几天有小伙伴问过我一个问题,为什么有DOM 0级事件以及DOM2级事件,但是却没有DOM1级事件呢?那我们今天就来说一说DOM的级别问题. 同时推荐伙伴们可以看看尚学堂有关JavaScript BO ...
- postgresql 日常sql
查看服务进程: select pid,usename,client_addr,client_port from pg_stat_activity; 查看当前数据库实例的版本: select ve ...
- Oracle列转行函数版本不兼容解决方案
业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不 ...
- ubuntu 16.04 下安装NVDIA的库(CUDA+CUDNN)
立志学习神经网络的同学,为了让它能够跑快一点,估计英伟达的GPU是要折腾一番的. 首先看一下什么是CUDA ? CUDA(Compute Unified Device Architecture),是显 ...
- 爬虫不过如此(python的Re 、Requests、BeautifulSoup 详细篇)
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 爬虫的本质就是一段自动抓取互联网信息的程序,从网络获取 ...
- 根据sockfd获取TCP连接本地地址以及对端地址
摘抄自muduo代码实现. 获取本地地址(LocalAddr): struct sockaddr_in6 sockets::getLocalAddr(int sockfd) { struct sock ...