C# Serializable 序列化学习

来源:互联网 发布:类似p2p的软件 编辑:程序博客网 时间:2024/05/01 14:03

Serializable

指示一个类可以序列化。 此类不能被继承。

将 SerializableAttribute 特性应用于一个类型可指示该类型的实例可以序列化。 如果正在序列化的对象图中的任何类型未应用 SerializableAttribute 特性,公共语言运行时则会引发SerializationException

即使该类也会实现 ISerializable 接口来控制序列化进程,仍要应用 SerializableAttribute 特性。

默认情况下,类型中由 SerializableAttribute 标记的所有公共和私有字段都会进行序列化,除非该类型实现 ISerializable 接口来重写序列化进程。 默认的序列化进程会排除用 NonSerializedAttribute特性标记的字段。 如果可序列化类型的字段包含指针、句柄或其他某些针对于特定环境的数据结构,并且不能在不同的环境中以有意义的方式重建,则最好将 NonSerializedAttribute 特性应用于该字段。

示例如下:

class Program
    {        static void Main(string[] args)        {            MyClass myclass = new MyClass();            Console.WriteLine("Before Serializable:");            Console.WriteLine("Show data:");            myclass.print();            Console.WriteLine("//////////////////////////////////////////////////");            Console.WriteLine("Begin Serializable....");            Stream stream = File.Open("data.xml", FileMode.Create);            SoapFormatter formatter = new SoapFormatter();            formatter.Serialize(stream, myclass);            stream.Close();            Console.WriteLine("End Serializable.");            myclass = null;            Console.WriteLine("//////////////////////////////////////////////////");            Console.WriteLine("Begin Deserialize...");            //Opens file "data.xml" and deserializes the object from it.            stream = File.Open("data.xml", FileMode.Open);            formatter = new SoapFormatter();            myclass = (MyClass)formatter.Deserialize(stream);            Console.WriteLine("End Deserialize...");            Console.WriteLine("Show data:");            myclass.print();            Console.ReadLine();        }    }    [Serializable]    public class MyClass    {        public int member1;        public string member2;        public string member3;        public double member4;        [NonSerialized]        public string member5;        public MyClass()        {            member1 = 11;            member2 = "hello";            member3 = "hello";            member4 = 3.14159265;            member5 = "hello world!";        }        public void print()        {            Console.WriteLine("member1 = '{0}'", member1);            Console.WriteLine("member2 = '{0}'", member2);            Console.WriteLine("member3 = '{0}'", member3);            Console.WriteLine("member4 = '{0}'", member4);            Console.WriteLine("member5 = '{0}'", member5);        }    }
输出内容:

完毕。

0 0
原创粉丝点击