C#序列化
1.序列化一般有2种(XML和2进制),简单对象序列化
- using System;
- using System.IO;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Windows.Forms;
- using System.Xml.Serialization;
- namespace Test
- {
- //对于XmlSerializer序列化,默认即使不使用特性Serializable,也是可以对对象进行序列化的,则BinaryFormatter不然一定要使用Serializable标记。
- public partial class Form1 : Form
- {
- //XmlSerializer是XML序列化
- XmlSerializer xs = new XmlSerializer(typeof(Student));
- //二进制序列化
- BinaryFormatter b = new BinaryFormatter();
- Student student = new Student() { Name = "小明", Age = };
- public Form1()
- {
- InitializeComponent();
- //xml序列化
- using (Stream stream = new FileStream("d:\\Student.xml", FileMode.Create, FileAccess.Write, FileShare.Read))
- {
- xs.Serialize(stream, student);
- }
- //xml反序列化
- using (FileStream fs = new FileStream("d:\\Student.xml", FileMode.Open, FileAccess.Read))
- {
- Student student = (Student)xs.Deserialize(fs);
- }
- //二进制序序列化
- using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Create))
- {
- BinaryFormatter b = new BinaryFormatter();
- //序列化类要加[Serializable]特性
- b.Serialize(fileStream, student);
- }
- //二进制序反序列化
- using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Open, FileAccess.Read))
- {
- BinaryFormatter bf = new BinaryFormatter();
- student = (Student)bf.Deserialize(fileStream);
- }
- }
- }
- }
- [Serializable]
- public class Student
- {
- public string Name { get; set; }
- public int Age { get; set; }
- }
2.复杂对象序列化
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Xml.Serialization;
- namespace Test
- {
- public partial class Form1 : Form
- {
- //XmlSerializer是XML序列化
- XmlSerializer xs = new XmlSerializer(typeof(TeacherStudent));
- //二进制序列化
- BinaryFormatter b = new BinaryFormatter();
- TeacherStudent teacherStudent = new TeacherStudent();
- Teacher teacher = new Teacher() { Name = "王老师", Age = };
- Student student = new Student() { Name = "小明", Age = };
- public Form1()
- {
- InitializeComponent();
- //xml序列化
- using (Stream stream = new FileStream("d:\\Student.xml", FileMode.Create, FileAccess.Write, FileShare.Read))
- {
- teacherStudent.Teacher = teacher;
- teacherStudent.Student = student;
- xs.Serialize(stream, teacherStudent);
- }
- //xml反序列化
- using (FileStream fs = new FileStream("d:\\Student.xml", FileMode.Open, FileAccess.Read))
- {
- teacherStudent = null;
- teacherStudent = (TeacherStudent)xs.Deserialize(fs);
- }
- //二进制序序列化
- using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Create))
- {
- BinaryFormatter b = new BinaryFormatter();
- b.Serialize(fileStream, teacher);
- b.Serialize(fileStream, student);
- }
- //二进制序反序列化
- using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Open, FileAccess.Read))
- {
- teacher = null;
- student = null;
- BinaryFormatter bf = new BinaryFormatter();
- teacher = (Teacher)bf.Deserialize(fileStream);
- student = (Student)bf.Deserialize(fileStream);
- }
- }
- }
- }
- [Serializable]
- public class Student
- {
- public string Name { get; set; }
- public int Age { get; set; }
- }
- [Serializable]
- public class Teacher
- {
- public string Name { get; set; }
- public int Age { get; set; }
- }
- [Serializable]
- public class TeacherStudent
- {
- public Teacher Teacher { get; set; }
- public Student Student { get; set; }
- }
3. 控制序列化/反序列化前后的数据
- using System;
- using System.IO;
- using System.Runtime.Serialization;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Windows.Forms;
- namespace Test
- {
- public partial class Form1 : Form
- {
- //XmlSerializer是XML序列化
- BinaryFormatter b = new BinaryFormatter();
- Student student = new Student() { Name = "小明", Age = };
- public Form1()
- {
- InitializeComponent();
- //二进制序序列化
- using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Create))
- {
- BinaryFormatter b = new BinaryFormatter();
- b.Serialize(fileStream, student);
- }
- //二进制序反序列化
- using (FileStream fileStream = new FileStream("d:\\Student.dat", FileMode.Open, FileAccess.Read))
- {
- BinaryFormatter bf = new BinaryFormatter();
- student = (Student)bf.Deserialize(fileStream);
- }
- }
- }
- }
- [Serializable]
- public class Student
- {
- public string Name { get; set; }
- public int Age { get; set; }
- [OnSerializing()]
- internal void OnSerializingMethod(StreamingContext context)
- {
- //格式化器在序列化开始之前调用此方法。
- Console.WriteLine("OnSerializing格式化器在序列化开始之前调用此方法");
- }
- [OnSerialized()]
- internal void OnSerializedMethod(StreamingContext context)
- {
- //格式化器在序列化后调用此方法。
- Console.WriteLine("OnSerialized格式化器在序列化后调用此方法");
- }
- [OnDeserializing()]
- internal void OnDeserializingMethod(StreamingContext context)
- {
- //格式化器在反序列化开始之前调用此方法。
- Console.WriteLine("OnDeserializing格式化器在反序列化开始之前调用此方法");
- }
- [OnDeserialized()]
- internal void OnDeserializedMethod(StreamingContext context)
- {
- //格式化器在序列化开始之前调用此方法。
- Console.WriteLine("OnDeserialized格式化器在序列化开始之前调用此方法");
- }
- }
C#序列化的更多相关文章
- 【.net 深呼吸】序列化中的“引用保留”
假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...
- 【.net 深呼吸】设置序列化中的最大数据量
欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...
- 用dubbo时遇到的一个序列化的坑
首先,这是标题党,问题并不是出现在序列化上,这是报错的一部分: Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to s ...
- Unity 序列化
Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...
- Unity 序列化 总结
查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...
- [C#] C# 知识回顾 - 序列化
C# 知识回顾 - 序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...
- Newtonsoft.Json设置类的属性不序列化
参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...
- C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...
- Netty实现高性能RPC服务器优化篇之消息序列化
在本人写的前一篇文章中,谈及有关如何利用Netty开发实现,高性能RPC服务器的一些设计思路.设计原理,以及具体的实现方案(具体参见:谈谈如何使用Netty开发实现高性能的RPC服务器).在文章的最后 ...
- .Net深入实战系列—JSON序列化那点事儿
序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...
随机推荐
- Angularjs -Promise - $http
https://www.peterbe.com/plog/promises-with-$http
- python笔记1-转义字符
print(r'dd"e"f')print(r'dd'e'f')print(r"dd"e"f")print(r"dd'e'f&qu ...
- Reset Identity Column Value in SQL Server (Identity Reset)
前言:今天在群里看到有人在问SQL Server自增值重置问题(sqlserver identiy column value reset ) 闲话少说,直接上代码: 正文: --create tabl ...
- widows和Linux java加密注意事项
/** * @Title: EncrypAES.java * @Package com.weidinghuo.payment.util * @Description: TODO(用一句话描述该文件做什 ...
- python包使用指南-创建虚拟环境
创建虚拟环境的两种方法: 1.virtualenv 2.venv http://packaging.python.org/en/latest/installing/#creating-virtual- ...
- Java学习笔记-Math类
并非所有的类都需要main方法.Math类和JOptionPane类都没有main方法.这些类中所包含的方法主要是为了供其他类使用. package welcome; public class Tes ...
- 2.3switch case 语句注意事项。
#include<stdio.h> int main() { void action1(int, int),action2(int, int); char ch; , b=; ch = g ...
- Oracle to_date()函数的用法
Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...
- SPSS课程学习思路及流程
数据挖掘领域对行的分析
- vtkQuadric创建二次曲面
在本实例中,我们将用到vtkQuadric.vtkSampleFunction.vtkContourFilter三个类,分别是二次曲面函数.函数曲面抽样和等高滤波. vtkQuadric负责二次曲面基 ...