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); }