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#序列化的更多相关文章

  1. 【.net 深呼吸】序列化中的“引用保留”

    假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...

  2. 【.net 深呼吸】设置序列化中的最大数据量

    欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...

  3. 用dubbo时遇到的一个序列化的坑

    首先,这是标题党,问题并不是出现在序列化上,这是报错的一部分: Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to s ...

  4. Unity 序列化

    Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...

  5. Unity 序列化 总结

    查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...

  6. [C#] C# 知识回顾 - 序列化

    C# 知识回顾 -  序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...

  7. Newtonsoft.Json设置类的属性不序列化

    参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...

  8. C# 序列化与反序列化几种格式的转换

    这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...

  9. Netty实现高性能RPC服务器优化篇之消息序列化

    在本人写的前一篇文章中,谈及有关如何利用Netty开发实现,高性能RPC服务器的一些设计思路.设计原理,以及具体的实现方案(具体参见:谈谈如何使用Netty开发实现高性能的RPC服务器).在文章的最后 ...

  10. .Net深入实战系列—JSON序列化那点事儿

    序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...

随机推荐

  1. js正则表达式(1)

    定义正则: var reg = new RegExp('a'); //实例化对象,参数是我们想要制定的规var reg = /a/; //简写方法 正则的常用方法: 1.test():在字符串中查找符 ...

  2. JavaScript的Dom操作

    两个练习: 1.两个表单里面的数据相互移动: <style type="text/css"> select { width: 100px; position: rela ...

  3. 脚手架搭建的vue项目里引入jquery和bootstrap

    引入jquery: 1.在cmd输入:npm install jquery,回车,等待.. 2.在webpack.base.conf.js里进行如下操作: 3.在webpack.prod.conf.j ...

  4. 12月4日PHPCMS模板

    cms的样式有很多种,我们学习的是phpcms,这些cms都是大同小异,学会了一种就可以使用其它的cms. PHPCMS是一款网站管理软件.该软件采用模块化开发,支持多种分类方式,使用它可方便实现个性 ...

  5. 基于tomcat与Spring的实现差异化配置方案

    起因 在实际开发过程中经常需要加载各种各样的配置文件..比如数据库的用户名密码,要加载的组件,bean等等..但是这种配置在各个环境中经常是不一样的....比如开发环境和测试环境,真实的生产环境.. ...

  6. nginx服务器命令

    nginx -s reload  :修改配置后重新加载生效 nginx -s reopen  :重新打开日志文件nginx -t -c /path/to/nginx.conf 测试nginx配置文件是 ...

  7. redis-window 集群配置

    参考文章: 1.http://www.cnblogs.com/zr520/p/5057141.html (主从配置) 2.http://www.cnblogs.com/lori/p/5825691.h ...

  8. linux下, 再次遇到使用thinkphp的模板标签时,报错used undefined function \Think\Template\simplexml_load_string() 是因为没有安装 php-xml包

    linux下, 使用thinkphp的模板标签,如 eq, gt, volist defined, present , empty等 标签时, 报错: used undefined function ...

  9. ASP.NET vNext on CentOS 7

    第一步是在Linux上安装.Net的运行时Mono VNext要求Mono最小版本3.4.1,可怜的centos连低版本的mono都不含.我们只能通过编译来安装.目前最新的版本为3.12 源码下载:h ...

  10. JS 函数的柯里化与反柯里化

    ===================================== 函数的柯里化与反柯里化 ===================================== [这是一篇比较久之前的总 ...