Скажем, у меня есть сериализованные байт экземпляра интерфейса, AnInterface
, например, так:Можете ли вы десериализовать экземпляр интерфейса без определения его типа?
AnInterface instance = new ConcreteClass();
serializeToDatabase(instance);
Можно ли сделать что-то вроде:
IFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
byte[] bytes = bytesSavedToDB;
stream.Write(bytes, 0, bytes.Length);
stream.Position = 0;
AnInterface instance = (AnInterface) formatter.Deserialize(stream);
без определения для ConcreteClass
?
Нет, вы не можете, вам нужен базовый тип. –
Что мешает вам узнать тип сериализованного класса? – ryanyuyu
BinaryFormatter использует Object.GetType(), вы не можете скрыть тот факт, что он действительно * является * ConcreteClass. Умышленно запутывание это не очень хорошая идея, вы действительно, действительно заботитесь о конкретном классе, если вы надеетесь, что десериализовать снова через год или на другой машине. В этот момент должна быть снова доступна * точная * та же версия ConcreteClass. –