国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#自定義序列化ISerializable的實現方法

2020-01-24 01:54:14
字體:
來源:轉載
供稿:網友

本文實例講述了C#自定義序列化ISerializable的實現方法。分享給大家供大家參考。具體實現方法如下:

[Serializable]public class BaseObject{  [OptionalField]  private string _str = "I am BaseObject";}[Serializable]public class TestObject : BaseObject, ISerializable{  int a;  string strName = "";  Color c = Color.Red;  DataTable _dtColors = null;  [OptionalField]  ArrayList list = new ArrayList();  [OptionalField]  List<int> list1 = new List<int>();  [OptionalField]  Dictionary<int, string> dic = new Dictionary<int, string>();  //當實現ISerializable接口時,如果該構造函數不存在,則會引發一個SerializationException異常  //該特性表示,該方法只允許序列化器調  [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]  protected TestObject(SerializationInfo info, StreamingContext context)  {   #region 如果基類也實現了ISerializable接口,則序列化器會自動調用基類的該構造函數,就不需要本段代碼   Type basetype = this.GetType().BaseType;   MemberInfo[] mi = FormatterServices.GetSerializableMembers(basetype, context);   for (int i = 0; i < mi.Length; i++)   {    //由于AddValue不能添加重名值,為了避免子類變量名與基類變量名相同,將基類序列化的變量名加上基類類名    FieldInfo fi = (FieldInfo)mi[0];    object objValue = info.GetValue(basetype.FullName + "+" + fi.Name, fi.FieldType);    fi.SetValue(this, objValue);   }   #endregion   a = info.GetInt32("a");   strName = info.GetString("strName");   c = (Color)info.GetValue("c", typeof(Color));   _dtColors = (DataTable)info.GetValue("_dtColors", typeof(DataTable));   list = (ArrayList)info.GetValue("list", typeof(ArrayList));   list1 = (List<int>)info.GetValue("list1", typeof(List<int>));   dic = (Dictionary<int, string>)info.GetValue("dic", typeof(Dictionary<int, string>));  }  public TestObject()  {   a = 100;   strName = "daps";   InitColorTable();   list1.Add(10);   list1.Add(20);    }  #region ISerializable 成員  [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter =true)]  void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)  {   info.AddValue("a", a);   info.AddValue("strName", strName);   info.AddValue("c", c);   info.AddValue("_dtColors", _dtColors);   info.AddValue("list", list);   info.AddValue("list1", list1);   info.AddValue("dic", dic);   Type basetype = this.GetType().BaseType;   MemberInfo[] mi = FormatterServices.GetSerializableMembers(basetype, context);   for (int i = 0; i < mi.Length; i++)   {    //由于AddValue不能添加重名值,為了避免子類變量名與基類變量名相同,將基類序列化的變量名加上基類類名    info.AddValue(basetype.FullName + "+" + mi[i].Name, ((FieldInfo)mi[i]).GetValue(this));   }  }  #endregion}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定南县| 黑龙江省| 辽中县| 岳阳县| 图片| 吉林省| 古浪县| 叶城县| 邵阳县| 余干县| 襄垣县| 张掖市| 鄯善县| 老河口市| 凉山| 晋中市| 高台县| 疏附县| 梁平县| 通海县| 兴宁市| 隆安县| 江西省| 灵寿县| 新郑市| 苍山县| 明星| 石泉县| 天长市| 秦皇岛市| 恩施市| 新和县| 澄江县| 上思县| 莱芜市| 高邑县| 海城市| 云梦县| 周至县| 星子县| 兴仁县|