最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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>();
  //當(dāng)實現(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#如何用ThoughtWorks生成二維碼

    C#如何用ThoughtWorks生成二維碼

    這篇文章主要介紹了C#如何用ThoughtWorks生成二維碼,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • VsCode使用EmmyLua插件調(diào)試Unity工程Lua代碼的詳細(xì)步驟

    VsCode使用EmmyLua插件調(diào)試Unity工程Lua代碼的詳細(xì)步驟

    這篇文章主要介紹了VsCode使用EmmyLua插件調(diào)試Unity工程Lua代碼,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#屬性get和set使用示例詳解

    C#屬性get和set使用示例詳解

    屬性是C#中的一種特殊成員,它允許外部以受控方式訪問類的狀態(tài),屬性通過get和set方法實現(xiàn)對類私有字段的讀取和修改,本文給大家介紹C#屬性get和set使用,感興趣的朋友一起看看吧
    2024-09-09
  • C#基于簡單工廠模式實現(xiàn)的計算器功能示例

    C#基于簡單工廠模式實現(xiàn)的計算器功能示例

    這篇文章主要介紹了C#基于簡單工廠模式實現(xiàn)的計算器功能,結(jié)合簡單實例形式分析了C#使用工廠模式的數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • 如何在C#中使用OpenCV(GOCW使用教程)

    如何在C#中使用OpenCV(GOCW使用教程)

    這篇文章主要介紹了如何在C#中使用OpenCV(GOCW使用教程),幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#中的TemplateMethod模式問題分析

    C#中的TemplateMethod模式問題分析

    這篇文章主要介紹了C#中的TemplateMethod模式,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • C#登入實例

    C#登入實例

    本篇文章通過截圖的方式向大家展示C#程序登陸實現(xiàn)的全過程,利用了C#三層架構(gòu)的編寫方法,希望對大家今后編寫代碼有所幫助
    2016-11-11
  • C#使用TCP協(xié)議實現(xiàn)數(shù)據(jù)發(fā)送和接受的方法

    C#使用TCP協(xié)議實現(xiàn)數(shù)據(jù)發(fā)送和接受的方法

    這篇文章主要介紹了c#使用TCP協(xié)議實現(xiàn)數(shù)據(jù)發(fā)送和接受,使用TCP協(xié)議實現(xiàn)數(shù)據(jù)的發(fā)送和接受包括客戶端和服務(wù)端兩個部分,本文通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • C#中is和as用法實例分析

    C#中is和as用法實例分析

    這篇文章主要介紹了C#中is和as用法實例分析,需要的朋友可以參考下
    2014-08-08
  • C#調(diào)用WebService的方法介紹

    C#調(diào)用WebService的方法介紹

    這篇文章介紹了C#調(diào)用WebService的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論

青岛市| 梧州市| 定远县| 陇南市| 民权县| 合江县| 丰原市| 雷波县| 筠连县| 福建省| 永和县| 乌鲁木齐市| 东台市| 汪清县| 根河市| 海原县| 延川县| 黄梅县| 沁水县| 塔城市| 宣化县| 民勤县| 崇信县| 绥棱县| 庆阳市| 庆元县| 顺义区| 洞口县| 通山县| 顺平县| 新化县| 大冶市| 精河县| 鄂伦春自治旗| 渭源县| 齐齐哈尔市| 鲜城| 恩施市| 习水县| 河北区| 永年县|