我有实现一些接口的类:
[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类型。
标准的解决方法应该是将mesntype ScriptState添加到接口IScriptState中,但我显然不能这样做:
[KnownType(typeof(Scriptstate))]
IScriptState
{}
因为带接口的程序集没有引用带类的程序集。
还有其他解决方案吗?
答案 0 :(得分:2)
我想我找到了解决方案。在帮助程序类中,使用obj.GetType()
而不是typeof(T)
:
DataContractSerializer ser = new DataContractSerializer(obj.GetType());