C# Serialize
一.序列化又称为串行化,是.NET运行时环境用来支持用户自定义类型的机制,目的是以某种存储给对象持久化,或者是将这种对象传输到另一个地方,
二. .NET框架提供了两种序列化的方式 一种是使用BinaryFormatter,另一种是SoapFormatter进行序列化,不过还有一种繁琐的序列化方式(XmlSerializer);
三.可以使用[Serializable]属性将类标记为可序列化,如果不想让某个类序列化,可以使用[NonSerialized] 或者 [XmlIgnore] 两种方式.
四.下面是一个可序列化的类
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;//引入命名空间
/// <summary>
/// ClassToSerialize 的摘要说明
/// </summary>
[Serializable] //可序列化标志
public class ClassToSerialize
{
public int id = 100;
public string name = "Name";
[NonSerialized] //不可序列化标志
public string Sex = "男";
}
五.序列化和反序列化的方法
public void SerializeNow()
{
Class1ToSerialize Class1To = new Class1ToSerialize();
FileStream fileStream = new FileStream("D:\\temp.txt", FileMode.Create);
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(fileStream,Class1To); //序列化 参数:流 对象
fileStream.Close();
}
public void DeSerializeNow()
{
Class1ToSerialize c = new Class1ToSerialize();
c.sex = "kkkk";
FileStream fileStream = new FileStream("D:\\temp.txt", FileMode.Open);
BinaryFormatter b = new BinaryFormatter();
c = b.Deserialize(fileStream) as Class1ToSerialize; //反序列化 替换对象
Console.Write(c.sex);
Console.Write(c.name);
fileStream.Close();
}
六.使用SoapFormatter进行串行化()
这个和BinaryFormatter基本一样
我们只需要做一个简单的修改
1.项目引用using System.Runtime.Serialization.Formatters.Soap;
2.引用using System.Runtime.Serialization.Formatters.Soap;命名空间
3.将formatters.binary改成formatters.Soap;
4.将所有的binaryFormatter改成soapformatter
5.将流改为XML格式的文件
研究:不过微软已经对SoapFormatter放弃了 因为不支持泛型的序列化
关于SoapFormatter的序列化结果 有诸多的Soap特性,为了除掉Soap特性,我们要使用XmlSerializer 库类
七.使用XmlSerialize进行序列化(支持泛型的Xml序列化)
XmlSerializer进行序列化 我们需要做一下修改
a.添加System.Xml.Serialization;命名空间
b.Serializable和NoSerialized属性将会被忽略,而是使用了[XmlIgnore] 它和NoSerialized类似
c.XmlSerializer要求被序列化的类要有默认的构造器 这个条件可能默认满足!
[Serializable]
public class Person
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string Sex;
public Hobby[] hobby = new Hobby[2];
[XmlIgnore]
public int age = 23;
/// <summary>
/// 构造函数
/// </summary>
public Person()
{
}
/// <summary>
/// 带参数的构造函数
/// </summary>
/// <param name="Name">姓名</param>
public Person(string Name)
{
name = Name;
Sex = "男";
}
}
//序列化方法
public class XmlSerializeVoid
{
/// <summary>
/// XmlSerialize序列化方法
/// </summary>
/// <param name="person">系列化对象</param>
public void XmlSerialize(Person person)
{
XmlSerializer xml = new XmlSerializer(typeof(Person));
FileStream stream = new FileStream("D:\\myxml.xml", FileMode.Create);
xml.Serialize(stream,person); //序列化
stream.Close();
}
/// <summary>
/// 反序列化方法
/// </summary>
/// <param name="person">序列化对象</param>
public Person XmlDeserialize()
{
XmlSerializer xml = new XmlSerializer(typeof(Person));
FileStream stream = new FileStream("D:\\myxml.xml", FileMode.Open);
Person person = xml.Deserialize(stream) as Person;
stream.Close();
return person;
}
}
Main方法
static void Main(string[] args)
{
Person person = new Person("张子浩");
person.hobby[0] = new Hobby() { hobbyName = "打代码"};
person.hobby[1] = new Hobby() { hobbyName = "听歌曲" };
XmlSerializeVoid xmlSerialize = new XmlSerializeVoid();
xmlSerialize.XmlSerialize(person) ;
Console.WriteLine("序列化成功:");
Person newperson = xmlSerialize.XmlDeserialize();
Console.WriteLine("反序列化成功:");
Console.WriteLine("年龄"+newperson.age);
Console.WriteLine("姓名"+newperson.Name);
Console.WriteLine("性别"+newperson.Sex);
Console.WriteLine("爱好1"+newperson.hobby[0].hobbyName);
Console.WriteLine("爱好2" + newperson.hobby[1].hobbyName);
}
C# Serialize的更多相关文章
- [LeetCode] Serialize and Deserialize BST 二叉搜索树的序列化和去序列化
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- [LeetCode] Serialize and Deserialize Binary Tree 二叉树的序列化和去序列化
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- PHP之:序列化和反序列化-serialize()和unserialize()
撰写日期:2016-7-7 10:56:40 参考PHP在线手册(php.net):http://php.net/manual/zh/function.serialize.php 1.序列化 seri ...
- PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据
如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...
- serialize存入数组
原代码 def get_type type_list = "" if categories.include?"movie" type_list += " ...
- jquery中使用serialize() 序列化表单时 中文乱码问题
序列化中文时之所以乱码是因为.serialize()调用了encodeURLComponent方法将数据编码了 解决方法就是进行解码 1 原因:.serialize()自动调用了encodeURICo ...
- U家面试prepare: Serialize and Deserialize Tree With Uncertain Children Nodes
Like Leetcode 297, Serialize and Deserialize Binary Tree, the only difference, this is not a binary ...
- Leetcode: Serialize and Deserialize BST
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- jQuery.serialize() 函数详解////////////z
serialize()函数用于序列化一组表单元素,将表单内容编码为用于提交的字符串. serialize()函数常用于将表单内容序列化,以便用于AJAX提交. 该函数主要根据用于提交的有效表单控件的n ...
- jquery.serialize
jQuery - serialize() 方法 serialize() 方法通过序列化表单值,创建 URL 编码文本字符串. serialize()函数用于序列化一组表单元素,将表单内容编码为用于提交 ...
随机推荐
- 2018-2019-2 20165239《网络对抗技术》Exp4 恶意代码分析
Exp4 恶意代码分析 实验内容 一.基础问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. •使用w ...
- jedis keys和scan操作
关于redis的keys命令的性能问题 KEYS pattern 查找所有符合给定模式 pattern 的 key . KEYS * 匹配数据库中所有 key . KEYS h?llo 匹配 hell ...
- 2018-2019网络对抗技术 20165220 Exp4 恶意代码分析
实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systracer套件. ...
- VSTO 获取sheet单元格行列数
Public Sub Igor() Dim Dtsheet As Excel.Worksheet Dim TotalC As Long '原始数据范围列 Dim TotalR As Long '原始数 ...
- Java 多文件压缩成一个文件工具类
简单修改来自博客园勇闯天涯zfc的博客 一.内容 ①使用 Java 将多个文件打包压缩成一个压缩文件: ②主要使用 java.io 下的类 二.源代码:ZIPUtil .java import jav ...
- CTSC2018 被屠记
占坑 day-1 Gery 和 lll 在火车上谈笑风生 day0 上午 Gery:"我要吊打全场" 下午 Gery 忘带杯子了. Gery:"我过两天碰杯了就可以喝到水 ...
- 在deepin上安装YouCompleteMe
详细安装步骤在github上有,https://github.com/Valloric/YouCompleteMe,我这里是自己总结的简化版安装步骤. 步骤1.安装Vundle 首先,clone到本地 ...
- [LeetCode] Fibonacci Number 斐波那契数字
The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...
- Java语法细节 - 内存和枚举
目录 Java申请DirectBuffer ByteBuffer的position,limit,capacity,flip操作之间的关系 枚举实现单例模式 Java申请DirectBuffer /*- ...
- Linux神奇命令之---tar
在生产中会常常用到压缩,解压缩,打包,解包等,这时候tar这个万能的小老弟就是是必不可少的了.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux的文件和目录创建档案 ...