2012-03-11 106 views
1

序列化類我有一個實現一些接口類: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 
{} 

因爲組件,接口與類沒有提及組裝。

有沒有另一種解決方案?

回答

2

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