Xml序列化与非序列化的4种方法
来源:互联网 发布:淘宝中怎么发布宝贝 编辑:程序博客网 时间:2024/04/30 20:06
以下代码VS2008下编译通过。
/* * 序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用。 * 序列化和反序列化最主要的作用有: * 1、在进程下次启动时读取上次保存的对象的信息 * 2、在不同的AppDomain或进程之间传递数据 * 3、在分布式应用系统中传递数据 * */using System;using System.IO;using System.Windows.Forms;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization.Formatters.Soap;using System.Xml.Serialization;using System.Xml;namespace Serializable用法示例{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } public string filepath = Application.StartupPath + "\\test.dat"; public string filepath2 = Application.StartupPath + "\\test.xml"; private void Form1_Load(object sender, EventArgs e) { SerData4(); //string str= SerData5(); //DeSerData5(str); } private void button1_Click(object sender, EventArgs e) { DeSerData4(); } /// <summary> /// BinaryFormatter序列化与反序列化2 /// </summary> private void SerData2() { Person person = new Person(); person.age = 18; person.name = "Tom"; person.secret = "hello world"; FileStream fs = new FileStream(filepath, FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, person); fs.Close(); Console.WriteLine("------serialize2 end"); } private void DeSerData2() { Person person = new Person(); FileStream fs = new FileStream(filepath, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); //反序列化得到的是一个Object对象,必须做下类型转化 person = (Person)bf.Deserialize(fs); fs.Close(); //结果为18,Tom,因为secret没有被实例化 Console.WriteLine("------" + person.age + "," + person.name + "," + person.secret); } /// <summary> /// SoapFormatter序列化与反序列化 /// </summary> private void SerData3() { Person person = new Person(); person.age = 18; person.name = "Tom"; person.secret = "hello world"; FileStream fs = new FileStream(filepath2, FileMode.Create); SoapFormatter sf = new SoapFormatter(); sf.Serialize(fs, person); fs.Close(); Console.WriteLine("------serialize3 end"); } private void DeSerData3() { Person person = new Person(); FileStream fs = new FileStream(filepath2, FileMode.Open); SoapFormatter sf = new SoapFormatter(); //反序列化得到的是一个Object对象,必须做下类型转化 person = (Person)sf.Deserialize(fs); fs.Close(); //结果为18,Tom,因为secret没有被实例化 Console.WriteLine("------" + person.age + "," + person.name + "," + person.secret); } /// <summary> /// XmlSerializer序列化与反序列化, /// 也保存为xml文件,无额外信息。只能保存public类型的字段, /// 而其它两种方法保存所有类型的字段 /// </summary> private void SerData4() { Person person = new Person(); person.age = 18; person.name = "Tom"; person.secret = "hello world"; FileStream fs = new FileStream(filepath2, FileMode.Create); XmlSerializer xs = new XmlSerializer(typeof(Person)); xs.Serialize(fs, person); fs.Close(); Console.WriteLine("------serialize4 end"); } private void DeSerData4() { Person person = new Person(); FileStream fs = new FileStream(filepath2, FileMode.Open); XmlSerializer xs = new XmlSerializer(typeof(Person)); //反序列化得到的是一个Object对象,必须做下类型转化 person = (Person)xs.Deserialize(fs); fs.Close(); //结果为18,Tom,因为secret没有被实例化 Console.WriteLine("------" + person.age + "," + person.name + "," + person.secret); } /// <summary> /// 利用XmlTextWriter将Person类与string相互转换 /// </summary> private string SerData5() { Person person = new Person(); person.age = 18; person.name = "Tom"; person.secret = "hello world"; MemoryStream ms = new MemoryStream(); XmlTextWriter xmlWriter = new XmlTextWriter(ms, System.Text.Encoding.UTF8); xmlWriter.Indentation = 4; xmlWriter.Formatting = Formatting.Indented; XmlSerializer formatter = new XmlSerializer(typeof(Person)); formatter.Serialize(xmlWriter, person); xmlWriter.Close(); string xmlstring = System.Text.Encoding.UTF8.GetString(ms.ToArray()); Console.WriteLine("{0},{1}",xmlstring.Length,xmlstring); return xmlstring; } private Person DeSerData5(string xmlstring) { byte[] buffer = System.Text.Encoding.UTF8.GetBytes(xmlstring); MemoryStream ms = new MemoryStream(buffer); XmlTextReader xmlReader = new XmlTextReader(ms); XmlSerializer formatter = new XmlSerializer(typeof(Person)); Person person = (Person)formatter.Deserialize(xmlReader); xmlReader.Close(); Console.WriteLine("------" + person.age + "," + person.name + "," + person.secret); return person; } }}
test.xml为:
<?xml version="1.0"?><Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <age>18</age> <name>Tom</name> <secret>hello world</secret></Person>
- Xml序列化与非序列化的4种方法
- 序列化与非序列化
- XML的序列化
- 对象,对象集合的简单Xml序列化与反序列化(非原创)
- C#序列非序列化
- xml解析与序列化
- JAVA中的序列化与非序列化
- xml与xml,datatable,序列化的操作
- XML序列化的实例
- Xml序列化的注意事项
- xml文件的序列化
- xml文件的序列化
- xml文件的序列化
- 安卓中xml的序列化
- 对象,对象集合的简单Xml序列化与反序列化 【实用代码,含泛型方法】
- readResolve()方法与序列化
- readResolve()方法与序列化
- readResolve()方法与序列化
- 工作随笔(RMI、WebService、REST)
- [精彩] 【转】Linux内核裁剪的具体步骤
- 记录欧盟洽谈会图片
- samba swat 配置使用
- hdu 2059 龟兔赛跑
- Xml序列化与非序列化的4种方法
- 占位
- java与jsp页面的字符串拼接和拆分
- S5PV210介绍
- c++三种获取时间方法
- Linux编程之库的知识(汇总)
- WDF驱动中的内存管理
- 邓丽君 - 漫步人生路
- 简单的css样式表范例(一)