C#中序列化与反序列化实例

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;

namespace TestSerializable
{
    [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)
        {
            //BinaryFormatter();
            //SoapFormatter();
            //XmlSerializer();
            ObjSerializer();
        }


        /// <summary>
        /// 保存成二进制数据流
        /// </summary>
        public static void BinaryFormatter()
        {
            //序列化
            Person p = new Person("Mond", 21, '男');
            using (FileStream stream = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.Write))
            {
                BinaryFormatter bf = new BinaryFormatter();
                //public void Serialize(Stream serializationStream, object graph);

                bf.Serialize(stream, p);
            }

            //反序列化
            using (FileStream stream2 = new FileStream("test.txt", FileMode.Open, FileAccess.Read))
            {
                BinaryFormatter bf2 = new BinaryFormatter();
                //public object Deserialize(Stream serializationStream);

                Person p2 = (Person)bf2.Deserialize(stream2);
                Console.WriteLine(p2.Name+"\n"+p2.Age+"\n"+p2.Gender);
                Console.ReadLine();
            }
        }


        /// <summary>
        /// 保存成xml   //需要添加引用System.Runtime.Serialization.Formatters.Soap;
        /// </summary>
        public static void SoapFormatter()
        {
            //序列化
            Person p = new Person("Mond", 21, '男');
            using (FileStream stream = new FileStream("test.xml", FileMode.OpenOrCreate, FileAccess.Write))
            {
                BinaryFormatter bf = new BinaryFormatter();
                //public void Serialize(Stream serializationStream, object graph);

                bf.Serialize(stream, p);
            }

            //反序列化
            using (FileStream stream2 = new FileStream("test.xml", FileMode.Open, FileAccess.Read))
            {
                SoapFormatter bf2 = new SoapFormatter();
                //public object Deserialize(Stream serializationStream);

                Person p2 = (Person)bf2.Deserialize(stream2);
                Console.WriteLine(p2.Name + "\n" + p2.Age + "\n" + p2.Gender);
                Console.ReadLine();
            }
        }


        /// <summary>
        /// 保存成xml
        /// </summary>
        public static void XmlSerializer()
        {
            //序列化
            Person person = new Person("Mond", 21, 'y');
            XmlSerializer ser = new XmlSerializer(person.GetType());
            ser.Serialize(new FileStream(@"test.xml", FileMode.Create), person);

            ////反序列化
            //XmlSerializer ser = new XmlSerializer(typeof(Person));
            //Person person = (Person)ser.Deserialize(new FileStream(@"test.xml", FileMode.Open));
            //Console.WriteLine(person.Name + "\n" + person.Age + "\n" + person.Gender);
            //Console.ReadLine();
        }


        /// <summary>
        /// 这个文件是把obj对象序列化后持久化存储的文件
        /// </summary>
        public static void ObjSerializer()
        {
            //序列化Person
            Person obj = new Person();
            obj.Gender = '1';
            obj.Age = 24;
            obj.Name = "一些字符串";
            IFormatter formatter = new BinaryFormatter();
            Stream MyStream = new FileStream("test.bin", FileMode.Create,
            FileAccess.Write, FileShare.None);
            formatter.Serialize(MyStream, obj);
            MyStream.Close();

            ////反序列化Person
            //IFormatter formatter = new BinaryFormatter();
            //Stream MyStream = new FileStream("test.bin", FileMode.Open,
            //FileAccess.Read, FileShare.Read);
            //Person obj = (Person)formatter.Deserialize(MyStream);
            //Console.WriteLine(obj.Name);
            //MyStream.Close();
            //Console.ReadLine();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39081464/article/details/81225216