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);
}
}
}
c# [Serializable] ISerializable
最新推荐文章于 2021-02-23 14:51:04 发布