2009-05-01 42 views
1

我有一個類,我已序列化到本地用戶計算機上的磁盤。我需要重構這個類,並將所有對象(除枚舉,字符串,數字之外的所有對象)更改爲接口。在它下面還是一樣的具體類。我所關注的是打破現有的用戶持久性重構類接口,而不破壞序列化在C#

來源:

public class Foo 
{ 
    public double Count; 
    public State MyState; 
} 

public class IFoo 
{ 
    public double Count; 
    public IState MyState; 
} 

,但現在我正在從序列碼,說:「不能序列化,因爲它的接口」錯誤

錯誤狀態:

「反映類型'Foo'的錯誤。」 「Can not serialize member'Foo.My'type of'IState',see more exception for more details。」

這是最好的方法是什麼?

+0

什麼平臺? java嗎? 。淨? – 2009-05-01 10:14:08

+0

.net csharp是平臺 – leora 2009-05-01 10:17:20

回答

2

您不能序列化接口,因爲可以實現接口的類型數量是無限的,序列化程序不知道它是什麼具體類型。

class A : IFoo {} 
class B : IFoo {} 
class C : IFoo {} 
//snip// 

IFoo f = new A(); 
    f = new B(); 
    f = new C(); 

如果你是序列化A,B或C.

另一種方式去思考的是反序列化到的IFoo時,必須指定,你怎麼知道其中創建... A,B或C ..等?

0

我想你將不得不通過實現ISerializable來顯式處理序列化。想想反序列化如何確定什麼具體的類用於IState。它不知道。這就是爲什麼你需要自己處理序列化的原因。

0

考慮從ISerializable有你IState接口繼承:

public interface IState : ISerializable 

閱讀上ISerializable第一。它增加了一些問題的複雜性。