/// <summary> /// Clones the current value of this cloner with the specified new shadow registry (optional) /// </summary> /// <param name="idRemapping">A dictionary containing the remapping of <see cref="IIdentifiable.Id"/> if <see cref="AssetClonerFlags.GenerateNewIdsForIdentifiableObjects"/> has been passed to the cloner.</param> /// <returns>A clone of the value associated with this cloner.</returns> private object Clone(out Dictionary <Guid, Guid> idRemapping) { var stream = streamOrValueType as Stream; if (stream != null) { stream.Position = 0; var reader = new BinarySerializationReader(stream); reader.Context.SerializerSelector = ClonerSelector; var refFlag = (flags & AssetClonerFlags.ReferenceAsNull) != 0 ? ContentSerializerContext.AttachedReferenceSerialization.AsNull : ContentSerializerContext.AttachedReferenceSerialization.AsSerializableVersion; reader.Context.Set(InvariantObjectListProperty, invariantObjects); reader.Context.Set(ContentSerializerContext.SerializeAttachedReferenceProperty, refFlag); reader.Context.Set(MemberSerializer.ObjectDeserializeCallback, OnObjectDeserialized); object newObject = null; reader.SerializeExtended(ref newObject, ArchiveMode.Deserialize); if ((flags & AssetClonerFlags.RemoveUnloadableObjects) != 0) { UnloadableObjectRemover.Run(newObject); } idRemapping = cloningIdRemapping; return(newObject); } // Else this is a value type, so it is cloned automatically idRemapping = null; return(streamOrValueType); }
private static UnloadableObjectRemover GetYamlProxyRemover() { var yamlProxyRemover = instanceTLS; if (yamlProxyRemover == null) { instanceTLS = yamlProxyRemover = new UnloadableObjectRemover(); } return yamlProxyRemover; }
private static UnloadableObjectRemover GetYamlProxyRemover() { var yamlProxyRemover = instanceTLS; if (yamlProxyRemover == null) { instanceTLS = yamlProxyRemover = new UnloadableObjectRemover(); } return(yamlProxyRemover); }