DataContractSerializer的。通过接口序列化类

时间:2012-03-11 19:43:11

标签: interface 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类型。

标准的解决方法应该是将mesntype ScriptState添加到接口IScriptState中,但我显然不能这样做:

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

因为带接口的程序集没有引用带类的程序集。

还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

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