c# [Serializable] ISerializable

来源:互联网 发布:淘宝差评如何防止骚扰 编辑:程序博客网 时间:2024/05/18 02:51
using System;using System.Threading;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization.Formatters.Soap;using System.IO;namespace SerializableAttributeTest{    class Program    {        static void Main(string[] args)        {            Person me = new Person();            me.Age = 32;            me.WeightInPounds = 170;            me.Time = DateTime.Now.ToLongTimeString();            //.net 环境使用二进制文件            Utility.SerializaBinary<Person>("Me.bat", me);            Person p1 = Utility.DeserializenBinary<Person>("Me.bat");            if (p1 != null)            {                Console.WriteLine("DeSerialized Person aged:{0} WeightInPounds:{1}", p1.Age, p1.WeightInPounds);                Console.WriteLine("DeSerialized Now time : {0}", me.Time);            }            Thread.Sleep(2000);            me.Time = DateTime.Now.ToLongTimeString();            //跨平台            Utility.SerializaSoap<Person>("Me.xml", me);            Person p2 = Utility.DeserializenSoap<Person>("Me.xml");            if (p2 != null)            {                Console.WriteLine("DeserializenSoap Person aged:{0} WeightInPounds:{1}", p2.Age, p2.WeightInPounds);                Console.WriteLine("DeserializenSoap Now time : {0}", me.Time);            }            Asian asian = new Asian();            asian.SkinColor = "Yellow";            asian.ARPU = 15000.344f;            Utility.SerializaBinary<Asian>("Asian.bat", asian);            Asian a1 = Utility.DeserializenBinary<Asian>("Asian.bat");            if (a1 != null)            {                Console.WriteLine("DeSerialized Asian SkinColor:{0} ARPU:{1}", a1.SkinColor, a1.ARPU);            }            Japanese japanese = new Japanese();            japanese.SkinColor = "Yellow";            japanese.ARPU = 59000.2311f;            japanese.CollegeDegrees = "H";            Utility.SerializaBinary<Japanese>("Japanese.bat", japanese);            Japanese j1 = Utility.DeserializenBinary<Japanese>("Japanese.bat");            if (j1 != null)            {                Console.WriteLine("DeSerialized Asian SkinColor:{0} ARPU:{1} Degree:{2}", j1.SkinColor, j1.ARPU,j1.CollegeDegrees);            }        }            }    public class Utility    {        public static void SerializaBinary<T>(string file, T obj) where T : class        {            Stream s = File.Open(file, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);            BinaryFormatter bf = new BinaryFormatter();            bf.Serialize(s, obj);            s.Close();        }        public static T DeserializenBinary<T>(string file) where T : class        {            Stream s = File.Open(file, FileMode.Open);            BinaryFormatter bf = new BinaryFormatter();            object o = bf.Deserialize(s);            s.Close();            return o as T;        }        public static void SerializaSoap<T>(string file, T obj) where T : class        {            Stream s = File.Open(file, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);            SoapFormatter sf = new SoapFormatter();            sf.Serialize(s, obj);            s.Close();        }        public static T DeserializenSoap<T>(string file) where T : class        {            using (Stream s = File.Open(file, FileMode.Open))            {                SoapFormatter sf = new SoapFormatter();                object o = sf.Deserialize(s);                s.Close();                return o as T;            }        }    }}using System;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization.Formatters.Soap;using System.IO;namespace SerializableAttributeTest{    //默认序列化    [Serializable]    class Person    {        public Person(){}        public int Age;        public int WeightInPounds;        [NonSerialized]        public string Time;    }    //自定义序列化 实现接口 ISerializable    [Serializable]    public class Asian : ISerializable    {        public string SkinColor;        public float ARPU;        public Asian() { }        public Asian(SerializationInfo info, StreamingContext context)        {            SkinColor = info.GetString("SkinColor");            ARPU = (float)info.GetDouble("ARPU");        }        public virtual void GetObjectData(SerializationInfo info, StreamingContext context)        {            info.AddValue("SkinColor", SkinColor);            info.AddValue("ARPU", ARPU);        }    }    [Serializable]    public class Japanese : Asian    {        public string CollegeDegrees;        public Japanese() : base() { }        protected Japanese(SerializationInfo info, StreamingContext context)            : base(info, context)        {            CollegeDegrees = info.GetString("CollegeDegrees");        }        public override void GetObjectData(SerializationInfo info, StreamingContext context)        {            base.GetObjectData(info, context);            info.AddValue("CollegeDegrees", CollegeDegrees);        }    }}

0 0