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. CSS之列表标签

    1 无序列表 无序列表,用来表示一个列表的语义,并且每个项目和每个项目之间,是不分先后的. ul就是英语unordered list,"无序列表"的意思. li 就是英语list ...

  2. 总结libevent安装方法

    1.先用:ls -al /usr/lib | grep libevent  查看是否已安装,如果已安装且版本低于1.3,则先通过:rpm -e libevent -nodeps 进行卸载. 2.下载l ...

  3. p/invoke 碎片-- 对字符串的处理

    字符串在内存中的的几种风格 字符串作为参数和返回值 参考 字符串在内存中的几种风格 所谓的风格,也就是字符串在内存中的存在形式.如何存放的,占据内存的大小,还有存放顺序等.在不同的编程语言和不同的平台 ...

  4. git查看本地和创建分支、上传分支、提交代码到分支、删除分支等,git分支、git查看本地和创建分支以及上传分支到服务器

    以下是git命令行里边的命令操作 ##进入项目目录下 giscafer@Faronsince2016 /G/002_project $ cd Comments ##查看远程分支有哪些 giscafer ...

  5. 修改context 和 enforce?

    http://jingyan.baidu.com/article/8ebacdf0cce84849f75cd57b.html 可以彻底的 关闭 selinux, selinux的配置文件 在 /etc ...

  6. 基础知识(05) -- Java中的类

    Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...

  7. vtkTransform实例 1

    1. 4*4矩阵类vtkMatrix4x4 接口函数:void SetElement(int i, int j, double value),i行.j列的值为value #ifndef INITIAL ...

  8. spring ioc 源码解析

    什么是ioc? 通俗的解释是:(spring)框架中,完成对象的创建和注入的容器. springIOC体系结构: spring IOC的创建是典型的工厂模式,这一系列的bean工厂如上所示. 其核心是 ...

  9. 一些LINQ的使用

    var list = from staff in staffList from extraRecord in extraList where staff.staffID == extraRecord. ...

  10. laravel5 安装笔记

    1.环境更新 apt-get update apt-get install php5-cli apt-get install curl 2. Composer安装 curl -sS https://g ...