博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
序列化与反序列化
阅读量:5320 次
发布时间:2019-06-14

本文共 2857 字,大约阅读时间需要 9 分钟。

序列化常用于对象信息的转化以便持久化保存,下面是二进制和xml的相关操作

一、二进制

二进制的序列化需引用命名空间:System.Runtime.Serialization.Formatters.Binar

/// /// 对象序列化为二进制数据/// public static byte[] SerializeToBinary(object obj){    using (MemoryStream ms = new MemoryStream())    {        BinaryFormatter formatter = new BinaryFormatter();        formatter.Serialize(ms, obj);        ms.Position = 0;        bytes = new byte[ms.Length];        ms.Read(bytes, 0, bytes.Length);    }            return bytes;}
/// /// 二进制数据反序列化为对象/// public static T DeserializeWithBinary
(byte[] bytes){ using (MemoryStream ms = new MemoryStream(bytes)) { ms.Position = 0; BinaryFormatter formatter = new BinaryFormatter(); return (T)formatter.Deserialize(ms); }}

二、Xml

xml的序列化引进命名空间:System.Xml.Serialization

/// /// 对象序列化为Xml数据/// public static string SerializeToXml(object obj){    using (MemoryStream ms = new MemoryStream())    {        XmlSerializer xml = new XmlSerializer(obj.GetType());        //序列化对象          xml.Serialize(ms, obj);        ms.Position = 0;        using (StreamReader sr = new StreamReader(ms))        {            str = sr.ReadToEnd();        }    }    return str;}
/// /// Xml数据反序列化为对象/// public static T DeserializeWithXml
(string xml){ using (StringReader sr = new StringReader(xml)) { XmlSerializer xmldes = new XmlSerializer(typeof(T)); return (T)xmldes.Deserialize(sr); }}

三、本地读写

public class FileReader : FileOperater{    ///     /// 读二进制内容    ///     public byte[] ReadBinary(string path)    {        if (!File.Exists(path))            return null;        byte[] bytes = null;        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))        {            bytes = new byte[fs.Length];            fs.Read(bytes, 0, bytes.Length);        }        return bytes;    }        ///     /// 读Xml内容    ///     public string ReadXml(string path)    {        if (!File.Exists(path))            return null;        string content = "";        using (StreamReader stream = new StreamReader(path, Encoding.Default, true))        {            content = stream.ReadToEnd();        }        return content;    }}
public class FileWriter : FileOperater{    ///     /// 写Xml内容    ///     public void WriteXML(string path, string content)    {        if (!File.Exists(path))            return null;        using (TextWriter txtWriter = new StreamWriter(path, false, Encoding.Default))        {            txtWriter.Write(content);        }    }    ///     /// 写二进制内容    ///     public void WriteBinary(string path, byte[] bytes)    {        if (!File.Exists(path))            return null;        using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))        {            fs.Write(bytes, 0, bytes.Length);        }    }}

转载于:https://www.cnblogs.com/SurroundSea/p/10923222.html

你可能感兴趣的文章
python查询mangodb
查看>>
Swift的高级分享 - Swift中的逻辑控制器
查看>>
内存地址对齐
查看>>
创新课程管理系统数据库设计心得
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>
Java抽象类和接口的比较
查看>>
MyBaits学习
查看>>
管道,数据共享,进程池
查看>>
CSS
查看>>
[Cypress] Stub a Post Request for Successful Form Submission with Cypress
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
php中的isset和empty的用法区别
查看>>
Android ViewPager 动画效果
查看>>
把word文档中的所有图片导出
查看>>