C# 序列化与反序列化

对象持久化到文本文件,策略是:将对象的属性值打散,拆解,分别存储。

序列化:  保存对象的"全景图"  序列化是将对象转换为可保存或可传输的格式的过程  三种:   二进制序列器:    对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下     [Serializable] //使对象可序列化(必须添加)      特性       程序集,类,方法,属性都可以使用特性       Java中注解 <==> C#特性     BinaryFormatter //创建二进制序列化器      Serialize(Stream(流),object(序列化对象))          流:可以理解成打通内存和硬盘的一个工具           输入流:从硬盘到内存           输出流:从内存到硬盘   XML序列化器:    对象序列化之后的结果符合SOAP协议,也就是可以通过SOAP?协议传输,通过System.Runtime.Serialization.Formatters.Soap命名空间下的SoapFormatter类来实现的。   SOAP序列化器:    对象序列化之后的结果是XML形式的,通过XmlSerializer?类来实现的,这个类位于System.Xml.Serialization命名空间下。XML序列化不能序列化私有数据。 反序列化:  将流转换为对象  Disk(硬盘)--->Cache(内存)  BinaryFormatter //创建二进制序列化器   Deserialize(Stream(流))//返回object类型 项目实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Serializable_Deserialize
{
    /// <summary>
    /// 用户类
    /// </summary>
    
    //声明特性
    [Serializable]
    public class UserInfo
    {
        public UserInfo()
        {
        }

        public UserInfo(string userName, string userAddress,string path)
        {
            UserName = userName;
            UserAddress = userAddress;
            Path = path;
        }

        public string UserName { get; set; }
        public string UserAddress { get; set; }
        public string Path { get; set; }
    }
}

序列化:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;

namespace Serializable_Deserialize
{
    /// <summary>
    /// 序列化
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            #region 序列化
            //集合初始化器    初始化数据
            List<UserInfo> list = new List<UserInfo>()
            {
                new UserInfo("房上的猫","北京海淀","https://www.cnblogs.com/lsy131479/"),
                new UserInfo("倾城月光~淡如水","北京大兴","http://www.cnblogs.com/fl72/")
            };
            Console.WriteLine("二进制序列化中...");
            //创建文件流派
            Stream stream = new FileStream("save.bin", FileMode.Create);
            //二进制序列化
            BinaryFormatter bf = new BinaryFormatter();
            //将对象或具有指定顶级 (根)、 对象图序列化到给定的流
            bf.Serialize(stream, list);
            //关闭流
            stream.Close();
            Console.WriteLine("二进制序列化成功!");
            #endregion

           
            Console.ReadLine();
        }
    }
}

反序列化:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;

namespace Serializable_Deserialize
{
    /// <summary>
    /// 反序列化
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
           

            #region 反序列化
            //创建文件流派
            Stream stream = new FileStream("save.bin", FileMode.Open);
            //二进制序列化
            BinaryFormatter bf = new BinaryFormatter();
            //指定的流反序列化对象图
            List<UserInfo> list = (List<UserInfo>)bf.Deserialize(stream);
            //遍历反序列化后的泛型集合
            foreach (UserInfo item in list)
            {
                Console.WriteLine(item.UserName + ":" + item.Path);
            }
            //关闭流
            stream.Close();
            #endregion
            Console.ReadLine();
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏更流畅、简洁的软件开发方式

我的数据访问类(第二版)—— for .net2.0 (一)

asp.net2.0已经出来好久了,由于许多的原因一直没有使用,一个月前才开始使用VS2005写东西。 这一个月里又重新学习了一下基础知识,比如多态、接口了什么...

1779
来自专栏逸鹏说道

C# 温故而知新: 线程篇(二) 下

首先介绍下Classic Async Pattern: 其实Classic Async Pattern指的就是我们常见的BeginXXX和EndXXX IAsy...

2687
来自专栏偏前端工程师的驿站

前端魔法堂——异常不仅仅是try/catch

1103
来自专栏互联网杂技

JavaScript定时器:setTimeout与setInterval 定时器与异步循环数组

深入了解一下 关于JavaScript定时器的知识; setTimeout与setInterval简述 setTimeout与setInterval使用方法基...

2646
来自专栏大内老A

.NET Core采用的全新配置系统[3]: “Options模式”下的配置是如何绑定为Options对象

配置的原子结构就是单纯的键值对,并且键和值都是字符串,但是在真正的项目开发中我们一般不会单纯地以键值对的形式来使用配置。值得推荐的做法就是采用《.NET Cor...

17210
来自专栏技术博客

Entity Framework DataAnnotations

DataAnnotation 特性由.NET 3.5中引进,给.NET中的类提供了一种添加验证的方式。但是在EF中它又可以对映射关系进行控制,相比较Fluent...

623
来自专栏Hongten

Hibernate二级缓存存集合对象

<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC ...

642
来自专栏码农阿宇

利用Asp.Net Core的MiddleWare思想处理复杂业务流程

最近利用Asp.Net Core 的MiddleWare思想对公司的古老代码进行重构,在这里把我的设计思路分享出来,希望对大家处理复杂的流程业务能有所帮助。

642
来自专栏码农阿宇

利用Asp.Net Core的MiddleWare思想处理复杂业务流程

最近利用Asp.Net Core 的MiddleWare思想对公司的古老代码进行重构,在这里把我的设计思路分享出来,希望对大家处理复杂的流程业务能有所帮助。

761
来自专栏向治洪

访问者模式

概念 访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 访问者模式的目的是封装一些施加于...

1705

扫描关注云+社区