Ваш заголовок спрашивает о десериализации - для которого ответ обычно "в том порядке, в котором они встречаются в потоке" - т.е. он назначает данные непосредственно членам (или добавляет в списки) так, как он их видит , В частности, списки обрабатываются следующим образом
- (читать заголовок, который отображается в поле списка)
- получить существующий список от участника или создать новый
- [*] чтение значения из потока
- добавить в список
- заглядывать в следующем заголовке; если то же поле, использовать заголовок и возобновить с [*]
- присваивать список члену при необходимости
одиночные базовые значения, с другой стороны, обрабатываются как:
- (читать заголовок, который отображается в поле значения)
- чтение значения из потока
- присвоить значение элементу
(примечание не зацикливается)
больше сложные значения (объекты) будут обработаны как:
- (читать заголовок, который отображается в поле объекта)
- чтение существующего объекта из члена
- объединить подобъект из подпотока или создать новый объект, если тривиально
- присваивать объект члену при необходимости
Существует тонкое исключение из этого, в случае «подобных кортежу» данных (с неявными контрактами), где по причинам реализации все значения хранятся в локальных элементах до тех пор, пока не будет использован поток объекта, а затем конструктор вызывается (порядок параметров в конструкторе неявно здесь упорядочен по тегу):
- подготовить локальную переменную для каждого поля (значения по умолчанию и т. Д.)
- потребляет подпоток, с логикой, как указано выше, но назначая локальные переменные, а не члены
- вызвать конструктор
Если вы имеете в виду «как он сериализуется», то он сериализуется в порядке возрастания тегов (в соответствии с указаниями в спецификации проводов) - однако, здесь делается небольшое исключение в случае наследования (которое он реализует на провод через подобъект для подкласса).