序列化和反序列化

序列化和反序列化

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

<1>

http://wenku.baidu.com/view/f15ac821dd36a32d737581e0.html

把“对象”转换为“字节序列”的过程称为对象的序列化。     把“字节序列”恢复为“对象”的过程称为对象的反序列化。

序列化

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

namespace 序列化与反序列化
{
    //序列化就是将对象转换成二进制
    //反序列化就是将二进制转换成对象

    //序列化与反序列化的作用就是:数据传输。 
    //我们在网络中数据传输的时候仅仅有二进制这个形态是能够被传输的。也就是说我们无论在网络中传输什么内容,都会先把你要传输的内容序列化成二进制的数据,对方接收到的相同就是一个二进制的数据。它须要再对这个二进制的数据进行反序列化成一个对象。

    //我们要序列化一个类。第一步就要将类标记为能够被序列化的。用[Serializable]keyword。

仅仅有被[Serializable]标记的类创建出来的对象才干被序列化 [Serializable] //这个[Serializable]的作用是:指示一个类能够序列化。无法继承此类。 public class Person { public string Name { get; set; } public int Age{get;set;} public char Gender{get;set;} public Person() { } public Person(string name, int age, char gender) { this.Name = name; this.Age = age; this.Gender = gender; } } class Program { static void Main(string[] args) { //如今我们要将p这个对象,传输给对方的电脑。如今没有对方的电脑。那我就在自己的电脑上模拟一下:如今通过一个流将p这个对象转换成二进制,写到我的桌面上。然后我们再将这个二进制文件在通过反序列化成一个对象 Person p = new Person("雪辉", 25, '女'); using (FileStream stream = new FileStream(@"C:\Users\凡斌\Desktop\11.txt", System.IO.FileMode.OpenOrCreate, FileAccess.Write)) { //開始序列化对象。

開始序列化对象须要一个类 BinaryFormatter bf = new BinaryFormatter(); //public void Serialize(Stream serializationStream, object graph); 这个Serialize方法的第一个參数:是对象要序列化成的流文件。第二个參数是:要序列化的对象 bf.Serialize(stream, p); } Console.WriteLine("序列化完成"); } }}

反序列化

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

namespace 序列化与反序列化
{
    [Serializable]
    public class Person
    {
        public string Name { get; set; }

        public int Age { get; set; }

        public char Gender { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {

            //如今我们再将刚刚写到桌面的二进制流文件11.txt通过反序列化成一个对象

            using (FileStream stream2 = new FileStream(@"C:\Users\凡斌\Desktop\11.txt", FileMode.Open, FileAccess.Read))
            {
                BinaryFormatter bf2 = new BinaryFormatter();

                //public object Deserialize(Stream serializationStream);这个Deserialize方法的參数是:要反序列化的二进制流文件。它的返回值是一个object 全部我们要将这个object强转成Person类型。
                Person p2=(Person) bf2.Deserialize(stream2);

                Console.WriteLine("方序列化成功");
                Console.WriteLine(p2.Name); //输出:雪辉
                Console.ReadKey();
            }

        }
    }
}

序列化

序列化

将此类的一个实例序列化为一个文件:
【MyFile.bin  这个文件是把obj对象序列化后持久化存储的文件】

MyObject obj = new MyObject(); 

obj.n1 = 1; 

obj.n2 = 24; 

obj.str = "一些字符串"; 

IFormatter formatter = new BinaryFormatter(); 

Stream MyStream = new FileStream("MyFile.bin", FileMode.Create, 

FileAccess.Write, FileShare.None); 

formatter.Serialize(MyStream, obj); 

stream.Close(); 

反序列化

反序列化

这里说的是将一个MyFile.bin文件通过反序列化,转换成一个obj对象
【filestream 读取这个文件流,然后用.net的序列化器反序列化成对象】

IFormatter formatter = new BinaryFormatter(); 

Stream MyStream = new FileStream("MyFile.bin", FileMode.Open, 

FileAccess.Read, FileShare.Read); 

MyObject obj = (MyObject) formatter.Deserialize(MyStream); 

stream.Close(); 

xml

将此类的实例序列化成一个Xml文件


XmlSerializer ser = new XmlSerializer(obj.GetType());  

ser.Serialize(new FileStream(@"users.xml", FileMode.Create), obj); 


反序列化
 

XmlSerializer serializer = new XmlSerializer(Type.GetType("MyObject"));  

MyObject my=(MyObject)serializer.Deserialize(new FileStream(@"users.xml",FileMode.Open)); 

序列化DataTable

主要是为了实现下次启动项目的时候能读取上次保存的对象信息。通俗点就是把一个对象保存起来。在特别的时候在把这个还原出来。在C#中常见的序列化的方法主要也有三个:BinaryFormatter、SoapFormatter、XML序列化。

今天涉及到的主要是XML序列化,就DataTable的内容序列化保存。

        /// <summary>
        /// DataTable序列化
        /// </summary>
        /// <param name="dt">须要序列化的DataTable</param>
        /// <param name="path">路径</param>
        public void Serializer(DataTable dt,string path)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(System.Data.DataTable));
            System.Xml.XmlWriter writer= System.Xml.XmlWriter.Create(path);
            serializer.Serialize(writer, dt);
        }
 
        //反序列化
        private void InitData(string filePath)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(System.Data.DataTable));
            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
            DataTable dt = (DataTable)serializer.Deserialize(fs);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                int j = dgvDeviceInfo.Rows.Add();
                dgvDeviceInfo.Rows[j].SetValues(dt.Rows[i]["设备ID"].ToString(),
                    dt.Rows[i]["序号"].ToString(),
                    dt.Rows[i]["设备名称"].ToString(),
                    dt.Rows[i]["编号"].ToString(),
                    dt.Rows[i]["连接信息"].ToString(),
                    dt.Rows[i]["备注"].ToString(),
                    dt.Rows[i]["TagID"].ToString());
            }
        }



版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116808.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • union 时只能查出一个表中的信息,另一个表只能查出字段

    union 时只能查出一个表中的信息,另一个表只能查出字段

    2021年10月15日
  • 鹰眼摄像头(OV7725)的使用

    鹰眼摄像头(OV7725)的使用原载:http://blog.csdn.net/lxk7280/article/details/26975233?utm_source=tuicool凭借着OV7620,将已经调好速度控制和角度控制的车子能跑起来了。基础功能实现后就开始对车子优化了。一个好的人眼睛最重要,同样对于一个好的平衡车,摄像头传感器最重要。因此我决心首先做的是对摄像头的优化。

  • 汉罗塔问题_6层汉诺塔最少步骤

    汉罗塔问题_6层汉诺塔最少步骤Hanoi汉诺塔是一个发源于印度的益智游戏,也叫河内塔。相传它源于印度神话中的大梵天创造的三个金刚柱,一根柱子上叠着上下从小到大64个黄金圆盘。大梵天命令婆罗门将这些圆盘按从小到大的顺序移动到另一根柱子上,其中大圆盘不能放在小圆盘上面。当这64个圆盘移动完的时候,世界就将毁灭。好吧上面这个东西是我直接百度copy的.这个源自孤古印度的游戏,还是有点意思的,也和递归扯上关系.但是我不明白…

    2022年10月12日
  • 集合框架一

    集合框架一

  • jvm jstat 命令使用

    jvm jstat 命令使用jstat的用法用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序。Jstat是JDK自带的一个轻量级小工具。全称“JavaVirtualMachinestatisticsmonitoringtool”,它位于java的bin目录下,主要利用JVM内建

  • pycharm调整字体大小_pycharm字体放大

    pycharm调整字体大小_pycharm字体放大pycharm中如何修改字体大小以及字体类型步骤:File->Settings->Editor->Font->Font->选择你喜欢的字体类型->Size->进行选择->Apply->OK

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号