/// <summary>
        /// Finds all the sub-messages in advance so we know their indices and can deserialize out of order if needed
        /// </summary>
        private void WalkMessage(FudgeMsg msg)
        {
            MsgAndObj msgAndObj = new MsgAndObj();

            msgAndObj.Msg = msg;
            int index = objectList.Count;

            objectList.Add(msgAndObj);
            msgToIndexMap[msg] = index;

            var fastFields = msg.GetFastFields();

            for (int i = 0; i < fastFields.Count; i++)
            {
                var field = fastFields[i];
                if (field.Type == FudgeMsgFieldType.Instance)
                {
                    WalkMessage((FudgeMsg)field.Value);
                }
            }
        }