Я хочу знать, как работает десериализация, и действительно ли нужно иметь сборку в этой системе, где происходит десериализация.Может ли кто-нибудь объяснить мне внутренности десериализации?
ответ
Если вы еще не посмотрели MSDN, сделайте это. Он расскажет вам все, что вам нужно знать о процессе сериализации/десериализации ... по крайней мере, достаточно, чтобы использовать его. Ссылка, которую я вам дал, это конкретно «как десериализовать».
Что касается более технических аспектов, то части информации, которые будут сериализованы, будут именно тем, что требуется для заполнения этой структуры/класса/объекта.
Я не совсем уверен, что вы подразумеваете под второй частью своего вопроса о сборке. Однако, если вы сериализуете структуру (например), то для десериализации на другую машину или приложение вы должны иметь такую же доступную структуру: имя, поля, типы данных и т. Д.
Если вы хотите, ищите точные данные, вы можете загрузить экземпляр Reflector и указать его на mscorlib
и изучить различные классы в пространстве имен System.Runtime.Serialization
. Вот идея высокого уровня (как я понимаю):
Первый шаг - гарантировать, что система типов, которая пишет двоичный поток, такая же, как система типов, которая считывает двоичный поток. Поскольку к выходу добавляется так мало метаинформации, проблемы могут возникать, если мы не смотрим на один и тот же тип. Если у нас есть два класса с именем A
, но автор считает A
class A { int m_a, m_b; }
, и читатель считает, что A
- class A { int m_b, m_a; }
, у нас будут проблемы. Эта проблема намного хуже, если типы существенно различаются. Имейте это в виду, он вернется позже.
Хорошо, поэтому мы читаем и пишем те же типы. Следующий шаг - найти всех членов объекта, который вы хотите сериализовать. Вы могли бы сделать это путем отражения с помощью вызова, например, typeof(T).GetFields(~System.Reflection.BindingFlags.Default)
, но это будет очень медленно (эмпирическое правило: отражение slow). К счастью, внутренние вызовы .NET намного быстрее.
Шаг 1: Теперь мы добираемся до письма. Во-первых: писатель пишет strong-name assembly, что объект, который мы сериализуем, находится внутри. Затем читатель может подтвердить, что на самом деле эта сборка загружена. Затем записывается тип класса с пространством имен объекта, поэтому читатель может считывать соответствующий объект. Это в основном гарантирует, что тип чтения и тип записи одинаковы.
Шаг 2: Время на самом деле написать объект. Взгляд на методы Formatter позволяет нам знать, что есть некоторые основные функции для написания int
s, float
и всевозможные простые типы. В заранее определенном порядке (порядок, который они объявляют, начиная с полей базового класса), каждое поле записывается на выход. Для полей, которые не являются простыми типами, возвращайтесь к шагу 1 с объектом в этом поле.
Для десериализации вы выполняете эти же шаги, за исключением замены всех глаголов, таких как «писать» глаголами типа «читать». Заказ чрезвычайно важен.
- 1. Может ли кто-нибудь объяснить мне темы?
- 2. Может ли кто-нибудь объяснить CMVideoFormatDescriptionGetCleanAperture() мне?
- 3. Может ли кто-нибудь объяснить мне StandardScaler?
- 4. Может ли кто-нибудь объяснить мне numpy.indices()?
- 5. Может кто-нибудь объяснить мне обработку исключений?
- 6. Что такое внутренности?
- 7. Может ли кто-нибудь объяснить мне этот код, пожалуйста,
- 8. Может ли кто-нибудь объяснить этот мод переписать мне?
- 9. Может ли кто-нибудь объяснить мне сетку «Золотая сетка»?
- 10. Может ли кто-нибудь объяснить мне popen() с режимом записи
- 11. Может ли кто-нибудь помочь мне объяснить эти тайминги метода?
- 12. Может ли кто-нибудь объяснить часть этого opencv-кода мне?
- 13. Может ли кто-нибудь объяснить мне, как работать самостоятельно?
- 14. Может ли кто-нибудь объяснить мне следующий пример?
- 15. Может ли кто-нибудь объяснить мне концепцию секционированных таблиц улья?
- 16. Может ли кто-нибудь объяснить мне, как сделать отзывчивый дизайн?
- 17. Может ли кто-нибудь объяснить мне эту директиву по паролю?
- 18. Может ли кто-нибудь объяснить мне этот метод разворота javax?
- 19. Может ли кто-нибудь объяснить мне функции обратного вызова?
- 20. Может ли кто-нибудь объяснить мне параметр RETURN_VALUE?
- 21. Может ли кто-нибудь объяснить мне независимость в байесовских сетях?
- 22. Может ли кто-нибудь объяснить мне этот код?
- 23. может ли кто-нибудь объяснить этот алгот для перестановки мне?
- 24. Может ли кто-нибудь объяснить мне сложность алгоритма Рабина-Карпа?
- 25. Может ли кто-нибудь объяснить мне эти функции Haskell?
- 26. Может ли кто-нибудь объяснить мне метод .getClass() в java
- 27. Рекурсивный метод тайны - Может ли кто-нибудь объяснить это мне?
- 28. Может ли кто-нибудь объяснить мне точку RAII?
- 29. Может ли кто-нибудь объяснить мне этот кусок кода?
- 30. Может ли кто-нибудь объяснить мне формат запроса Dblink
От XML или Binary? Как ни странно, они действуют совершенно по-другому. Лучший вопрос: зачем вам нужна сборка? Если вы переходите к не-.NET, то вам лучше всего будет сериализовать XML (или какой-то другой формат сериализации обычного текста). В этом случае вам не нужно знать внутренние элементы 'XmlSerializer'.Если вы используете связь .NET с .NET, тогда лучше всего позволить инфраструктуре обрабатывать все для вас. –
Первый ответ - двоичный. Actaully im спрашивает об этом только из-за моей странности, как то, как происходит Deserialization. Более того, когда происходит сериализация, какая информация, кроме объекта, становится сериализованной. – Amit