欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#自定義序列化ISerializable的實現(xiàn)方法

 更新時間:2015年04月28日 10:58:35   作者:igoo  
這篇文章主要介紹了C#自定義序列化ISerializable的實現(xiàn)方法,涉及C#序列化的操作技巧,非常具有實用價值,需要的朋友可以參考下

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

[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>();
  //當實現(xiàn)ISerializable接口時,如果該構(gòu)造函數(shù)不存在,則會引發(fā)一個SerializationException異常
  //該特性表示,該方法只允許序列化器調(diào)
  [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
  protected TestObject(SerializationInfo info, StreamingContext context)
  {
   #region 如果基類也實現(xiàn)了ISerializable接口,則序列化器會自動調(diào)用基類的該構(gòu)造函數(shù),就不需要本段代碼
   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#程序設(shè)計有所幫助。

相關(guān)文章

  • C#簡易人機對抗“石頭剪刀布”游戲的實現(xiàn)

    C#簡易人機對抗“石頭剪刀布”游戲的實現(xiàn)

    本文主要介紹了C#簡易人機對抗“石頭剪刀布”游戲的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • 用C#獲取硬盤序列號,CPU序列號,網(wǎng)卡MAC地址的源碼

    用C#獲取硬盤序列號,CPU序列號,網(wǎng)卡MAC地址的源碼

    用C#獲取硬盤序列號,CPU序列號,網(wǎng)卡MAC地址的源碼...
    2007-03-03
  • c#操作Redis的5種基本類型匯總

    c#操作Redis的5種基本類型匯總

    這篇文章主要給大家介紹了關(guān)于c#操作Redis的5種基本類型,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-07-07
  • C#實現(xiàn)根據(jù)銀行卡卡號判斷銀行名

    C#實現(xiàn)根據(jù)銀行卡卡號判斷銀行名

    這篇文章主要介紹了C#實現(xiàn)根據(jù)銀行卡卡號判斷銀行名,是從其他網(wǎng)友的java程序改編而來,有需要的小伙伴可以參考下。
    2015-07-07
  • C# 關(guān)于LoadLibrary的疑問詳解

    C# 關(guān)于LoadLibrary的疑問詳解

    這篇文章主要介紹了C# 關(guān)于LoadLibrary的疑問詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#中屬性(Attribute)的用法

    C#中屬性(Attribute)的用法

    這篇文章介紹了C#中屬性(Attribute)的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#中關(guān)于可空類型的小知識

    C#中關(guān)于可空類型的小知識

    這篇文章主要介紹了C#中關(guān)于可空類型的小知識,本文講解可空類型運算的小技巧,需要的朋友可以參考下
    2015-04-04
  • C# WinForm實現(xiàn)自動更新程序的方法詳解

    C# WinForm實現(xiàn)自動更新程序的方法詳解

    這一篇就著重寫一下客戶端的代碼,客戶端主要實現(xiàn)的有:啟動后檢測本地的xml文件,然后發(fā)送到服務(wù)器獲取需要更新的文件以及版本列表,感興趣的小伙伴可以了解一下
    2022-10-10
  • c# winform異步不卡界面的實現(xiàn)方法

    c# winform異步不卡界面的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于c# winform異步不卡界面的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用c#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • c# DataDirectory的用法

    c# DataDirectory的用法

    這篇文章主要介紹了c# DataDirectory的用法,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下
    2020-08-08

最新評論