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

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

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

本文實(shí)例講述了C#自定義序列化ISerializable的實(shí)現(xiàn)方法。分享給大家供大家參考。具體實(shí)現(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)實(shí)現(xiàn)ISerializable接口時(shí),如果該構(gòu)造函數(shù)不存在,則會(huì)引發(fā)一個(gè)SerializationException異常
  //該特性表示,該方法只允許序列化器調(diào)
  [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
  protected TestObject(SerializationInfo info, StreamingContext context)
  {
   #region 如果基類也實(shí)現(xiàn)了ISerializable接口,則序列化器會(huì)自動(dòng)調(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
}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(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代碼,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • C#屬性get和set使用示例詳解

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

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

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

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

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

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

    C#中的TemplateMethod模式問(wèn)題分析

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

    C#登入實(shí)例

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

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

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

    C#中is和as用法實(shí)例分析

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

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

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

最新評(píng)論

恩平市| 陵水| 凤翔县| 绥江县| 永修县| 平阳县| 赤水市| 绍兴县| 方城县| 昌黎县| 宝清县| 蛟河市| 金华市| 乐东| 鹤山市| 诸暨市| 石屏县| 筠连县| 濮阳县| 洪洞县| 伊春市| 永登县| 云阳县| 建瓯市| 洱源县| 兰考县| 元氏县| 和硕县| 潮安县| 太白县| 塔城市| 洱源县| 浏阳市| 营山县| 永善县| 龙里县| 贺州市| 印江| 商都县| 紫云| 巩留县|