Podstawowy projekt zawiera abstrakcyjną klasę podstawową Foo. W oddzielnych projektach klienckich istnieją klasy implementujące tę klasę podstawową.Serializowanie i odtwarzanie nieznanej klasy
Chciałbym serializacji i przywrócić wystąpienie konkretnej klasy przez wywołanie niektóre metody w klasie bazowej:
// In the base project:
public abstract class Foo
{
abstract void Save (string path);
abstract Foo Load (string path);
}
Można przypuszczać, że w momencie deserializacji, wszystkie potrzebne zajęcia są obecne . Jeśli to możliwe, serializacja powinna być wykonana w XML. Umożliwienie wykonania klasy podstawowej IXmlSerializable jest możliwe.
Trochę utknąłem tutaj. Jeśli moje rozumienie rzeczy jest poprawne, to jest to możliwe tylko przez dodanie [XmlInclude(typeof(UnknownClass))]
do klasy bazowej dla każdej klasy implementacji - ale klasy implementacji są nieznane!
Czy istnieje sposób, aby to zrobić? Nie mam doświadczenia z refleksją, ale z zadowoleniem przyjmuję również odpowiedzi z nim związane.
Edycja: Problem polega na serializacji De. Tylko serializowanie byłoby łatwe. :-)
zrealizować ten jest bardzo stary, ale wygląda na to świetne rozwiązanie. Zastanawiające się, jak używać funkcji FromXml, ponieważ nie jest do końca jasne: "T src" nie jest używane i wymaga utworzenia instancji klasy. Usunięcie go powoduje, że kompilator musi się zastanowić, co to jest T. –