1. 程式人生 > >IDictionary 序列化一定要實現父類實現了ISerializable介面的,子類也必須有序列化建構函式,否則反序列化時會出錯。

IDictionary 序列化一定要實現父類實現了ISerializable介面的,子類也必須有序列化建構函式,否則反序列化時會出錯。

//public class ThreadSafeDictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICloneable
    [Serializable]
    public class ThreadSafeDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ICloneable
    {
        public object Clone()
        {
            BinaryFormatter Formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
            MemoryStream stream = new MemoryStream();
            Formatter.Serialize(stream, this);
            stream.Position = 0;
            object clonedObj = Formatter.Deserialize(stream);
            stream.Close();
            return clonedObj;
        }

        public ThreadSafeDictionary() { }
        //父類實現了ISerializable介面的,子類也必須有序列化建構函式,否則反序列化時會出錯。
        protected ThreadSafeDictionary(SerializationInfo info, StreamingContext context)
            : base(info, context)
        {
            //Value = info.GetBoolean("Test_Value");
        }

        public override void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            base.GetObjectData(info, context);
            //info.AddValue("Test_Value", Value);
        }

        //public bool Value { get; set; }        
    }

這時,才可以序列化和反序列化這個Dictionary.

相關推薦

IDictionary 序列一定實現實現ISerializable介面的必須序列建構函式否則序列時會出錯

//public class ThreadSafeDictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICloneable [Serializable] public class

java序列一定應該注意的6個事項!

1、如果子類實現Serializable介面而父類未實現時,父類不會被序列化,但此時父類必須有個無參構造方法,否則會拋InvalidClassException異常。 2、靜態變數不會被序列化,那是類

【java 建構函式】為什麼一定訪問中的建構函式

子類的所有建構函式中的第一行,其實都有一條隱身的語句super(); 解釋: super()表示父類的建構函式並會調用於引數相對應的父類中的建構函式。子類中,它在呼叫父類中空引數的建構函式。因為子類繼承父類,會繼承到父類中的資料,所以必須要看父類是如何對自己的資料進行初始化的。所以子類在進行物件初始化時,先呼

JAVA-初步認識-第九章-繼承-中的構造函數-的實例過程

pri 系統 color col 分享 log 添加 就會 sys 一. 子父類中構造函數的特點。 舉例演示一下, 類中不寫構造函數,它裏面也是有的。只是寫出來,可以看的更清楚一些。 DOS結果顯示比較特別,在有Zi run的情況下,還有Fu run的存在。按道理說,子

中存在參構造函數時函數必須將其實現

構造函數public static class A{ int a; public A(int c){ a=5; } } //可以看出父函數若存在有參的構造函數,子函數在繼承的時候必須實現它。 public static class B extends A{ pu

在C#中自己手動在派生建構函式中逐一的初始的欄位嗎

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[

中的抽象方法讓實現

父類 public abstract class Baba {public abstract void say(String a);public void dosomething(String a){say(a);} } 子類 public class Erzi exte

一定定義拷貝建構函式特別是在成員含有指標的情況(不論指標是何種型別)安全!!!

using namespace std; class people  { private:char *name;int age; public:people(char *namestr,int i);/*people( const people& temp);*/~people();char *get

例項的成員變數建構函式程式碼塊的執行順序

package test; public class SuperC { static int i=10; SuperC(){ print(); } void print(){ System.out.println(i); } }package test; public class

實現Parcelable介面繼承需要實現的操作

show me the code public class A implements Parcelable { public String str; public boolea

的引用對象指向的對象

() exce png hole 虛擬機 end 類對象 -h 類型   在java的多態中,經常會看到父類的引用對象指向子類的對象,一開始很迷茫,因為按照之前所學的知識,父類的引用對象指向自身對象或者子類的引用對象指向自身對象都不難理解,因此為了方便理解,下面舉了一個例子

java基礎 靜態 static 問在多態中靜態方法覆蓋靜態方法時引用調用的是哪個方法?

xtend java pos main 靜態方法 show extends ava pri 多態 package com.swift.jiekou; public class Jicheng_Tuotai_jingtai_diaoyong { publ

沒有無參構造方法,怎麽辦學習筆記

第一條 system 獲取 extend string 構造方法 案例 code AR class Demo6_Extends { public static void main(String[] args) { Son s1 = new Son()

形參是的List,實參是的問題

需要對多個子類的集合進行同一種操作.本來可以寫多個方法就可以進行相應的多個方法的實現..現在想寫個簡單實用的方法,進行書寫.直接寫子父類的繼承,引數是父類,實參是子類是完全可以簡單實現的...   但是現在的形參是父類的集合,實參是子類的集合,所以,在進行測試的時候,就多去想了想.

檢視控制器是使用Xib建立的如何繼承的樣式

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     self = [super initWithNib

因為它中心交易所慌(黃)嗎?

作者 | Gnosis 譯者 | 臣天 自門頭溝事件以來,中心化交易所屢屢出現安全問題,造成大量金錢丟失,由於區塊鏈技術的去中心化特徵,去中心化交易所大勢所趨,被認為更加安全。 Snark 是以太坊下一個側鏈解決方案,由以太坊研究者

獲取實現介面的所有並返回該類中自定義的方法的方法名

準備階段:   定義介面和實現介面的類。 interface IMyInterface { void Write(); } /// <summary> /// 實現類1 /// </summary>

mysql 根據id 遞迴查詢所有的

1、mysql中建立遞迴查詢方法 -- DROP FUNCTION `getChildrenOrg`  CREATE FUNCTION `getChildrenOrg`(uuid INT) RETURNS text CHARSET utf8 BEGIN     DECLAR

Python12(介面繼承呼叫多型)

介面繼承: 基類不用實現內部邏輯,只是為了規範子類,可以用abc模組中以新增裝飾器的方式實現 1 import abc 2 class All_file(metaclass=abc.ABCMeta): 3 4 @abc.abstractmethod 5 d

JAVA中內部類

一個.java原始檔中可以有多個類(不包含內部類),但是隻有一個類是Public的,如 public class Test {  public class A{//內部類  }  public class B{//內部類  } // /** //  * @param arg