【问题标题】:DataContractSerializer. Serializing class through interface数据合同序列化器。通过接口序列化类
【发布时间】:2012-03-11 19:43:11
【问题描述】:

我的类实现了一些接口:

[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
{}

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

还有其他解决方案吗??

【问题讨论】:

    标签: interface datacontractserializer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      相关资源
      最近更新 更多