zoukankan      html  css  js  c++  java
  • 对象的序列化与反序列化

    对象的序列化

    .net中对象的序列化是指将对象的状态存储起来,先将对象的字段和属性以及类名转换为字节流,然后再把字节流写入数据流。通过对对象反序列化,得到原对象完全相同的副本。

    对象的序列化主要的目的是将对象持久化,经过持久化的对象可以从一个地方传输到另一个地方。


    在.net中, IFormatter接口提供了对象序列化的功能。他有两个公有的方法:

    反序列化对象方法
    Deserialize : Deserializes the data on the provided stream and reconstitutes the graph of objects。

    序列化对象方法
    Serialize:Serializes an object, or graph of objects with the given root to the provided stream。

    我们可以将对象序列化成两种格式:

    BinaryFormatter :将对象序列化为二进制格式
    SoapFormatter:将对象序列化为Soap格式

    代码:

    //要进行序列化的类
     1using System;
     2using System.Collections.Generic;
     3using System.Text;
     4
     5namespace SerializeDemos
     6{
     7    [Serializable]
     8    public class Car
     9    {
    10        private string _Price;
    11        private string _Owner;
    12        public string Price
    13        {
    14            get return this._Price; }
    15            set this._Price = value; }
    16        }

    17        public string Owner
    18        {
    19            get return this._Owner; }
    20            set this._Owner = value; }
    21        }

    22        public Car(string o, string p)
    23        {
    24            this.Price = p;
    25            this.Owner = o;
    26        }

    27    }

    28}

    29

    //序列化以及反序列化对象
     1using System;
     2using System.Collections.Generic;
     3using System.ComponentModel;
     4using System.Data;
     5using System.Drawing;
     6using System.Text;
     7using System.Windows.Forms;
     8using System.IO;
     9using System.Runtime.Serialization.Formatters.Binary;
    10using System.Runtime.Serialization.Formatters.Soap;
    11using System.Xml.Serialization;
    12
    13
    14namespace SerializeDemos
    15{
    16
    17    public partial class Form1 : Form
    18    {
    19        public Form1()
    20        {
    21            InitializeComponent();
    22        }

    23        private void Form1_Load(object sender, EventArgs e)
    24        {
    25
    26        }

    27
    28        private void button1_Click(object sender, EventArgs e)
    29        {
    30            Car car = new Car(this.txtOwner.Text, this.txtPrice.Text);
    31            FileStream fileStream = new FileStream("SerializedCar.bin", FileMode.Create);
    32            // 用二进制格式序列化
    33            BinaryFormatter binaryFormatter = new BinaryFormatter();
    34            binaryFormatter.Serialize(fileStream, car);
    35            fileStream.Close();
    36            MessageBox.Show("Successful");
    37        }

    38
    39        private void button2_Click(object sender, EventArgs e)
    40        {
    41            Car car = new Car(this.txtOwner.Text, this.txtPrice.Text);
    42            FileStream fileStream = new FileStream("SerializedCar.Soap", FileMode.Create);
    43            // 序列化为Soap
    44            SoapFormatter formatter = new SoapFormatter();
    45            formatter.Serialize(fileStream, car);
    46            fileStream.Close();
    47            MessageBox.Show("Successful");
    48        }

    49
    50        private void button3_Click(object sender, EventArgs e)
    51        {
    52            Car car = new Car(this.txtOwner.Text, this.txtPrice.Text);
    53            FileStream fileStream = new FileStream("SerializedCar.xml", FileMode.Create);
    54            // 序列化为xml
    55            SoapFormatter formatter = new SoapFormatter();
    56            formatter.Serialize(fileStream, car);
    57            fileStream.Close();
    58            MessageBox.Show("Successful");
    59        }

    60
    61        private void button4_Click(object sender, EventArgs e)
    62        {  
    63            System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();
    64            //二进制格式反序列化
    65            Stream stream = new FileStream("SerializedCar.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
    66            Car mycar = (Car)formatter.Deserialize(stream);
    67            stream.Close();
    68            MessageBox.Show(string.Format("Price of Car: {0},\n Owner:{1}", mycar.Price, mycar.Owner));
    69        }

    70
    71        private void button5_Click(object sender, EventArgs e)
    72        {
    73            System.Runtime.Serialization.IFormatter formatter = new SoapFormatter();
    74            //Soap格式反序列化
    75            Stream stream = new FileStream("SerializedCar.Soap", FileMode.Open, FileAccess.Read, FileShare.Read);
    76            Car mycar = (Car)formatter.Deserialize(stream);
    77            stream.Close();
    78            MessageBox.Show(string.Format("Price of Car: {0},\n Owner:{1}", mycar.Price, mycar.Owner));
    79        }

    80
    81        private void button6_Click(object sender, EventArgs e)
    82        {
    83            System.Runtime.Serialization.IFormatter formatter = new SoapFormatter();
    84            //Xml格式反序列化
    85            Stream stream = new FileStream("SerializedCar.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
    86            Car mycar = (Car)formatter.Deserialize(stream);
    87            stream.Close();
    88            MessageBox.Show(string.Format("Price of Car: {0},\n Owner:{1}", mycar.Price, mycar.Owner));
    89        }

    90    }

    91}
  • 相关阅读:
    Android composite adb interface
    android自适应屏幕方向和大小
    Android音频介绍
    android如何播放和录制音频
    Android中解决图像解码导致的OOM问题
    android 图片占用内存与什么有关
    int android.graphics.Bitmap.getRowBytes()
    Thymeleaf select 反显 默认选中
    淘宝H5 sign加密算法
    c# 菜鸟包裹查询
  • 原文地址:https://www.cnblogs.com/chorrysky/p/573808.html
Copyright © 2011-2022 走看看