public override string ReadMemberName(ref ObjectContext objectContext, string memberName, out bool skipMember) { var objectType = objectContext.Instance.GetType(); OverrideType[] overrideTypes; var realMemberName = TrimAndParseOverride(memberName, out overrideTypes); // For member names, we have a single override, so we always take the last one of the array (In case of legacy property serialized with ~Name) var overrideType = overrideTypes[overrideTypes.Length - 1]; if (overrideType != OverrideType.Base) { Dictionary <YamlAssetPath, OverrideType> overrides; if (!objectContext.SerializerContext.Properties.TryGetValue(OverrideDictionaryKey, out overrides)) { overrides = new Dictionary <YamlAssetPath, OverrideType>(); objectContext.SerializerContext.Properties.Add(OverrideDictionaryKey, overrides); } var path = GetCurrentPath(ref objectContext, true); path.PushMember(realMemberName); overrides.Add(path, overrideType); } var resultMemberName = base.ReadMemberName(ref objectContext, realMemberName, out skipMember); // If ~Id was not found as a member, don't generate an error, as we may have switched an object // to NonIdentifiable but we don't want to write an upgrader for this if (!ShadowId.IsTypeIdentifiable(objectType) && memberName == ShadowId.YamlSpecialId) { skipMember = true; } return(resultMemberName); }
private void PrepareMembersCallback(ObjectDescriptor objDesc, List <IMemberDescriptor> memberDescriptors) { var type = objDesc.Type; if (ShadowId.IsTypeIdentifiable(type) && !typeof(IIdentifiable).IsAssignableFrom(type)) { memberDescriptors.Add(customDynamicMemberDescriptor); } // Call custom callbacks to prepare members PrepareMembersEvent?.Invoke(objDesc, memberDescriptors); }