2009-05-01 37 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第一。它增加了一些问题的复杂性。