У меня есть класс, который реализует некоторый интерфейс:
[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
{}
потому что сборка с интерфейсом не имеет ссылки на сборку с классом.
Есть ли другое решение ??