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());