public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
        {
            if (CanVisit(typeDescriptor.Type))
                return this;

            return null;
        }
Esempio n. 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ObjectContext"/> struct.
 /// </summary>
 /// <param name="serializerContext">The serializer context.</param>
 /// <param name="instance">The instance.</param>
 /// <param name="descriptor">The descriptor.</param>
 public ObjectContext(SerializerContext serializerContext, object instance, ITypeDescriptor descriptor) : this()
 {
     SerializerContext = serializerContext;
     Instance = instance;
     Descriptor = descriptor;
     Properties = new PropertyContainer();
 }
Esempio n. 3
0
        public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
        {
            if (CanVisit(typeDescriptor.Type))
            {
                return(this);
            }

            return(null);
        }
 /// <inheritdoc/>
 public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     if (typeDescriptor is CollectionDescriptor)
     {
         var dataStyle = typeDescriptor.Type.GetCustomAttribute<DataStyleAttribute>();
         if (dataStyle == null || dataStyle.Style != DataStyle.Compact)
             return this;
     }
     return null;
 }
        /// <inheritdoc/>
        public IYamlSerializable GetSerializer(SerializerContext context, ITypeDescriptor typeDescriptor)
        {
            if (!isSealed) throw new InvalidOperationException("A serializer factory selector must be sealed before being used.");
            IYamlSerializable serializer;

            // First try, with just a read lock
            serializerLock.EnterReadLock();
            var found = serializers.TryGetValue(typeDescriptor.Type, out serializer);
            serializerLock.ExitReadLock();

            if (!found)
            {
                // Not found, let's take exclusive lock and try again
                serializerLock.EnterWriteLock();
                if (!serializers.TryGetValue(typeDescriptor.Type, out serializer))
                {
                    foreach (var factory in factories)
                    {
                        serializer = factory.TryCreate(context, typeDescriptor);
                        if (serializer != null)
                        {
                            serializers.Add(typeDescriptor.Type, serializer);
                            break;
                        }
                    }
                }
                serializerLock.ExitWriteLock();
            }

            if (serializer == null)
            {
                throw new InvalidOperationException($"Unable to find a serializer for the type [{typeDescriptor.Type}]");
            }

            return serializer;
        }
 /// <inheritdoc/>
 public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     return CanVisit(typeDescriptor.Type) ? this : null;
 }
 public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     var type = typeDescriptor.Type;
     return type == typeof(SettingsProfile) ? this : null;
 }
 public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
 {
     var type = typeDescriptor.Type;
     return type == typeof(EntityComponentCollection) ? this : null;
 }