示例#1
0
        /// <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);
        }