private Type GetObjectType(Type hintType, FudgeMsg message)
        {
            Type        objectType = null;
            IFudgeField typeField  = message.GetByOrdinal(FudgeSerializer.TypeIdFieldOrdinal);

            if (typeField == null)
            {
                if (hintType == null)
                {
                    throw new FudgeRuntimeException("Serialized object has no type ID");
                }
                objectType = hintType;
            }
            else if (typeField.Type == StringFieldType.Instance)
            {
                var typeName = (string)typeField.Value;
                objectType = typeMappingStrategy.GetType(typeName);
                if (objectType == null)
                {
                    var typeNames = message.GetAllValues <string>(FudgeSerializer.TypeIdFieldOrdinal);
                    for (int i = 1; i < typeNames.Count; i++)       // 1 because we've already tried the first
                    {
                        objectType = typeMappingStrategy.GetType(typeNames[i]);
                        if (objectType != null)
                        {
                            // Found it
                            break;
                        }
                    }
                }
            }
            else
            {
                throw new NotSupportedException("Serialisation framework does not support back/forward references");
            }
            return(objectType);
        }