2011-01-30 84 views
2

具有以下結構如何在使用派生類的實例時序列化基類?

[Serializable] 
public class Parent 
{ 
    public int x = 5; 
} 

[Serializable] 
public class Child : Parent 
{ 
    public HashAlgorithm ha; //This is not Serializable 

} 

我想這個使用下面的代碼序列:

public class Util { 
    static public byte[] ObjectToByteArray(Object obj) 
    { 
     if (obj == null) 
     { 
      return null; 
     } 
     BinaryFormatter bf = new BinaryFormatter(); 
     MemoryStream ms = new MemoryStream(); 
     bf.Serialize(ms, obj); 
     return ms.ToArray(); 
    } 
} 

我在我的代碼Child類型的對象的工作,但是,我有內場Child不可序列化的對象(例如:HashAlgorithm)。因此,我試圖將轉換爲類型Parent使用下面的代碼:

public byte[] tryToSerialize(Child c) 
{ 
    Parent p = (Parent) c; 
    byte[] b = Util.ObjectToByteArray(p); 
    return b; 
} 

然而,這將返回錯誤HashAlgorithm不可序列化,儘管試圖序列不包括這一領域的孩子。我怎樣才能完成我所需要的?

+0

在這種情況下,聽起來像正確的修復是[NonSerialized],正如已經提到的那樣。但是,作爲一個旁白,關於具體的問題,這個「忽略子類型」是我對protobuf-net調整列表中的一些東西(它只是表示*不做*做某事,所以是一個簡單的修復) – 2011-01-30 08:48:52

回答

3

這是不可能的。
您不能將一個類序列化爲其基類之一。

取而代之,將[NonSerialized]添加到該字段中。

3

你可以在基類實現ISerializable的,然後就通過從事物衍生,如:

private Child() { } // Make sure you got a public/protected one in Parent 

private Child(SerializationInfo info, StreamingContext context) 
    : base(info, context) { } 

後您實現ISerializable的只是使用Serialize方法從兒童。

相關問題