public FastDeserializationMapping(DeserializationTemplate inTemplate, FastSerializationTemplate outTemplate) { targetType = outTemplate.targetType; template = inTemplate; members = new List <FastDeserializationInfo>(16); // Dictionaries look up faster than lists! var fields = outTemplate.serializableFields; var properties = outTemplate.serializableProperties; foreach (var memberInfo in inTemplate.serializedMembers) { FastDeserializationInfo dinfo; string name = memberInfo.name; var typeInfo = memberInfo.typeInfo; if (fields.TryGetValue(name, out DeserializationFieldInfo outField) && typeInfo.Equals(outField.targetType)) { dinfo = outField; } else if (properties.TryGetValue(name, out DeserializationPropertyInfo outProperty) && typeInfo.Equals(outProperty.targetType)) { dinfo = outProperty; } else { dinfo = new FastDeserializationInfo(false, typeInfo); } if (typeInfo.type == null) { Debug.LogWarningFormat("Tried to deserialize field '{0}' on type {1} but it no longer exists", name, inTemplate.typeName); } members.Add(dinfo); } }
/// <summary> /// Applied before GetDeserializationTemplate runs. /// </summary> internal static bool Prefix(Type type, ref DeserializationTemplate __result) { __result = FastSerializationManager.GetDeserializationTemplate(type); return(false); }