2010-06-10 10 views

Odpowiedz

2

Tak, jest to możliwe.

Zserializowane dane XML/CSV/JSON muszą zawierać identyfikatory, aby umożliwić deserializatorowi określenie typów obiektów do utworzenia, ponieważ nie można o tym wcześniej wiedzieć. Aby deserializator mógł konstruować nowe instancje obiektów, zwykle stosuje się wzorzec projektowy FactoryMethod.

Deserializacja jest trudniejsza niż serializacja.

1

Nie w prosty sposób. Musiałbyś napisać logikę, aby przeanalizować dane i zdecydować, jaki typ najbardziej przypomina swój format.

1

Powszechnie tak. Ale to zależy od tego, z jakiego serializmu korzystasz. Zserializowane dane muszą zawierać metadane dotyczące typów serializowanych obiektów. Na przykład serializacja xml (System.Xml.Serialization) nie obsługuje tego scenariusza.

2

To zależy od serializacji.

BinarySerializer osadza informacje o typie w jego strumieniu wyjściowym, więc to, co opisujesz, będzie działało idealnie. Dostajesz obiekt i możesz nawet zrobić na nim odbicie, a następnie rzucić go we właściwy typ.

Serializacja XML nie działa w ten sposób, dlatego XmlSerializer wymaga typu w swoim konstruktorze.

Najlepszym rozwiązaniem jest sytuacja, w której dane mogą należeć do ograniczonej liczby typów, z których wszystkie dziedziczą po typie podstawowym. Następnie możesz podać typ bazowy (który jest ozdobiony znanymi atrybutami typu, aby poinformować go o wszystkich innych typach, jakie mogą być), a następnie przekształcić dane do standardowego typu podstawowego, a następnie sprawdzić go.

CSV i JSON są jeszcze trudniejsze, ponieważ nie ma w nich wiele wsparcia dla serializacji.

Powiązane problemy