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 ...
随机推荐
- Caffe学习
将binaryproto转为npy import caffe % suppose caffe is already in the path of Python import numpy as np i ...
- vue.js开发环境搭建
1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html) 2.基于node.js,利用淘宝npm镜像安装相关依赖 在cmd ...
- Mysql字符集设置
转 基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如’A'.’B'等:• 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodi ...
- AngularJS学习第一课
AngularJS2与AngularJS1有很大的不同. AngularJS2支持ECMAScript6,为了提升性能,支持移动化开发(安卓.ios平台),因此升级为AngularJS 2,Angul ...
- Java 时间的表示
//不建议的方式 out.println("<p>结束Servlet的时间:" + new Date().toLocaleString() + "</p ...
- 每天写点python
1.收集系统信息python小程序 1 #!/usr/bin/env python 2 #A system information gathering script 3 4 import subpro ...
- Beta阶段项目总结
1. 每个成员在beta 阶段的实践和alpha 阶段有何改进? 王文奇:对数据库的操作更为熟练,在java web中实现对数据库的修改更加完善 刘元柱:对javascript,css和servl ...
- 用Model-View-ViewModel构建iOS App
如果你已经开发一段时间的iOS应用,你一定听说过Model-View-Controller,即MVC.MVC是构建iOS App的标准模式.然而,最近我已经越来越厌倦MVC的一些缺点.在本文,我将重温 ...
- PHP延迟静态绑定
类可以自下往上调用父类方法,如果需要在父类中根据不同的子类,来调用子类的方法,那么就需要延迟静态绑定.延迟静态绑定用的是保留关键词static. 所谓延迟静态绑定,顾名思义,静态调用时::符号左侧的部 ...
- Orchard 模块开发学习笔记 (1)
创建模块 首先,打开Bin目录下的Orchard.exe 等到出现orchard>后, 看看命令列表中是否存在 codegen module 如果不存在,则需要先执行:feature enabl ...