Czy można deserializować (C#) kawałek xml, csv, json (cokolwiek to jest) i nie wiem, jaki jest typ? Ale należy zwrócić obiekt (który ostatecznie jest właściwym typem)?Nie znając typu przed deserializacją
Odpowiedz
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.
Nie w prosty sposób. Musiałbyś napisać logikę, aby przeanalizować dane i zdecydować, jaki typ najbardziej przypomina swój format.
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.
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.
- 1. czyszczenie JSON dla XSS przed deserializacją
- 2. removeEventListener nie znając funkcji
- 3. Utwórz obiekt, znając tylko nazwę klasy?
- 4. Odczytaj wiersz z pliku, nie znając długości linii
- 5. Dlaczego Web Web API nie jest deserializacją, ale JSON.Net będzie?
- 6. Jak wykryć problemy z deserializacją java?
- 7. Jackson: XML na mapę z deserializacją listy
- 8. Wyjątek z prostą deserializacją struktury XML XML
- 9. Jak radzić sobie z deserializacją z polimorfizmem?
- 10. Błąd: oczekiwany specyfikator typu przed "ClassName"
- 11. Parse.com - Jak zalogować się jako użytkownik, nie znając hasła?
- 12. C++ jak zdefiniować funkcję, nie znając dokładnych parametrów
- 13. SQL Server: drop table klucz podstawowy, nie znając jego nazwę
- 14. Get par klucz-wartość słownika, nie znając jego typ
- 15. Znając typ urządzenia - Retina/non-Retina
- 16. Dekodowanie hash szyfrowanie sha256, znając sól
- 17. Znając liczbę parametrów przekazanej funkcji (erlang)
- 18. Znając kompletny zmieniły ciąg w textField: shouldChangeCharactersInRange: replacementString:
- 19. Nie zera przed przecinkiem
- 20. C++: Jak przekazać funkcję (nie znając jej parametrów) do innej funkcji?
- 21. Jak mogę odróżnić brakujące pole z deserializacją i zerowe?
- 22. Jak przekazać parametr do konstruktora z deserializacją json
- 23. Problemy z deserializacją XML w klasach generowanych przez XSD
- 24. Jak zatrzymać program Proguard przed usunięciem parametrów typu?
- 25. Oczekiwany konstruktor, destruktor lub konwersja typu przed tokenem "*"
- 26. Błąd: oczekiwany konstruktor, destruktor lub konwersja typu przed ';' znak?
- 27. 'cout' nie wymienia typu
- 28. Ograniczenie typu "nie" Haskella
- 29. przesuń wartości tablicy 3D znając nowe współrzędne z maską
- 30. Gradle: Nie można utworzyć usługi typu FileHasher