DataContractSerializer。通过接口

问题描述:

序列化类我有一个实现一些接口类:DataContractSerializer。通过接口

[DataContract] 
public class ScriptState : IScriptState 
{ 
    <...> 
} 

我有简单的辅助类

public class Serializer 
{ 
    string Serialize<T>(T obj) 
    { 
    MemoryStream ms = new MemoryStream(); 
    DataContractSerializer ser = new DataContractSerializer(typeof(T)); 
    ser.WriteObject(ms, obj); 
    <...> 
    } 
} 

的问题是,我已经松散耦合的应用程序,我得到ScriptState对象是这样的:

IScriptstate ss = ServiceLocator.Resolve<IScriptState>(); 

即变量有接口的类型,它正在由串行器处理:

Serializer.Serialize(ss); 

因为这DataContracrSerializer,并进行实例化类型的接口IScriptState的,但真正的类型的对象是ScriptState,从而导致错误,并不期望类型ScriptState。

标准的解决办法应该是增加knowntype ScriptState接口IScriptState,但我不能这样做显然是:

[KnownType(typeof(Scriptstate))] 
IScriptState 
{} 

因为组件,接口与类没有提及组装。

有没有另一种解决方案?

我想我找到了解决方案。在助手类中使用obj.GetType()而不是typeof(T)DataContractSerializer ser = new DataContractSerializer(obj.GetType());