Я разрабатываю программу просмотра, которая сможет открывать все пользовательские документы, которые мы создаем с помощью нашего программного обеспечения. Все документы наследуются от IDocument, но я не уверен, как выполнить десериализацию (в хорошем смысле - вложенный try / catch может, вероятно, работать, но это будет отвратительно).
Итак, мой метод, как он выглядит сейчас, выглядит так:
public Boolean OpenDocument(String filename, Type docType, out IDocument document)
{
// exception handling etc. removed for brevity
FileStream fs = null;
BinaryFormatter bFormatter = new BinaryFormatter();
fs = new FileStream(filename, FileMode.Open);
document = (docType)bFormatter.Deserialize(fs);
return true;
}
Очевидно, что это не работает, поскольку я не могу использовать переменную docType таким образом, но я думаю, что она иллюстрирует смысл того, что я пытаюсь сделать. Каков будет правильный путь для этого?
edit> @John
хорошо, возможно я должен добавить другой вопрос:
если у меня есть интерфейс:
public interface IDocument
{
public Int32 MyInt { get; }
}
и класс:
public class SomeDocType : IDocument
{
protected Int32 myInt = 0;
public Int32 MyInt { get { return myint; } }
public Int32 DerivedOnlyInt;
}
если я десериализую в IDocument, будет ли DerivedOnlyInt быть частью объекта - таким образом, что после десериализации я могу привести к SomeDocType, и все будет хорошо?