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 ...
随机推荐
- Jenkins 安装FAQ
1.对路径的访问被拒绝,如: 解决办法:以管理员模式进入DOS命令窗口,参考Jenkins安装中的第4步: 2.服务不能启动,提示: 解决办法:启动Windows Service(InstallU ...
- bootstrap学习笔记--bootstrap概览
HTML 5 文档类型(Doctype) Bootstrap 使用了一些 HTML5 元素和 CSS 属性.为了让这些正常工作,您需要使用 HTML5 文档类型(Doctype). 因此,请在使用 B ...
- Ajax方式上传文件
用到两个对象 第一个对象:FormData 第二个对象:XMLHttpRequest 目前新版的Firefox 与 Chrome 等支持HTML5的浏览器完美的支持这两个对象,但IE9尚未支持 For ...
- webapi-test
- 常用的数据统计Sql 总结
最近刚在搞一个BI的项目,里面需要大量的sql 数据统计相关运用,加深了我又对SQL的理解与使用. 所以,分享几个数据统计时常用的sql 语句总结: 1. 统计各个条件下的数据 select Batc ...
- Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)
环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...
- 开源项目GitHub
GitHub 手把手教你如何加入到github的开源世界! http://www.open-open.com/lib/view/open1396580186465.html 如何在 Github 上发 ...
- eclipse新建web项目开发JSP
1.创建项目:file---new--Dynamic Web Project 一直选next,到jsp文件目录所在地,打勾默认自动生成web.xml配置文件,也可以自己设置. 创建JSP文件: 选择创 ...
- UVA 1401 Remember the Word
字典树优化DP Remember the Word Time Limit: 3000MS Memory Limit: Unknown ...
- nodejs express下使用redis管理session
Session实现原理 实现请求身份验证的方式很多,其中一种广泛接受的方式是使用服务器端产生的Session ID结合浏览器的Cookie实现对Session的管理,一般来说包括以下4个步骤: 服务器 ...