Beispiel #1
0
        public void Ctor_Name(string providerTypeName)
        {
            var attribute = new DefaultSerializationProviderAttribute(providerTypeName);

            Assert.Same(providerTypeName, attribute.ProviderTypeName);
        }
Beispiel #2
0
        /// <summary>Gets the serializer for the given object type.</summary>
        /// <returns>The serializer for <paramref name="objectType" />, or null, if not found.</returns>
        /// <param name="objectType">The type of object for which to retrieve the serializer.</param>
        /// <param name="serializerType">The type of serializer to retrieve.</param>
        /// <exception cref="T:System.ArgumentNullException">
        ///   <paramref name="objectType" /> or <paramref name="serializerType" /> is null.</exception>
        public object GetSerializer(Type objectType, Type serializerType)
        {
            if (serializerType == null)
            {
                throw new ArgumentNullException("serializerType");
            }
            object obj = null;

            if (objectType != null)
            {
                if (this.serializers != null)
                {
                    obj = this.serializers[objectType];
                    if (obj != null && !serializerType.IsAssignableFrom(obj.GetType()))
                    {
                        obj = null;
                    }
                }
                if (obj == null)
                {
                    AttributeCollection attributes = TypeDescriptor.GetAttributes(objectType);
                    foreach (Attribute attribute in attributes)
                    {
                        if (attribute is DesignerSerializerAttribute designerSerializerAttribute)
                        {
                            string serializerBaseTypeName = designerSerializerAttribute.SerializerBaseTypeName;
                            if (serializerBaseTypeName != null)
                            {
                                Type runtimeType = this.GetRuntimeType(serializerBaseTypeName);
                                if (runtimeType == serializerType && designerSerializerAttribute.SerializerTypeName != null && designerSerializerAttribute.SerializerTypeName.Length > 0)
                                {
                                    Type runtimeType2 = this.GetRuntimeType(designerSerializerAttribute.SerializerTypeName);
                                    if (runtimeType2 != null)
                                    {
                                        obj = Activator.CreateInstance(runtimeType2, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.CreateInstance, null, null, null);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    if (obj != null && this.session != null)
                    {
                        if (this.serializers == null)
                        {
                            this.serializers = new Hashtable();
                        }
                        this.serializers[objectType] = obj;
                    }
                }
            }
            if (this.defaultProviderTable == null || !this.defaultProviderTable.ContainsKey(serializerType))
            {
                Type type = null;
                DefaultSerializationProviderAttribute defaultSerializationProviderAttribute = (DefaultSerializationProviderAttribute)TypeDescriptor.GetAttributes(serializerType)[typeof(DefaultSerializationProviderAttribute)];
                if (defaultSerializationProviderAttribute != null)
                {
                    type = this.GetRuntimeType(defaultSerializationProviderAttribute.ProviderTypeName);
                    if (type != null && typeof(IDesignerSerializationProvider).IsAssignableFrom(type))
                    {
                        IDesignerSerializationProvider designerSerializationProvider = (IDesignerSerializationProvider)Activator.CreateInstance(type, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.CreateInstance, null, null, null);
                        ((IDesignerSerializationManager)this).AddSerializationProvider(designerSerializationProvider);
                    }
                }
                if (this.defaultProviderTable == null)
                {
                    this.defaultProviderTable = new Hashtable();
                }
                this.defaultProviderTable[serializerType] = type;
            }
            if (this.designerSerializationProviders != null)
            {
                bool flag = true;
                int  num  = 0;
                while (flag && num < this.designerSerializationProviders.Count)
                {
                    flag = false;
                    foreach (IDesignerSerializationProvider designerSerializationProvider2 in this.designerSerializationProviders)
                    {
                        object serializer = designerSerializationProvider2.GetSerializer(this, obj, objectType, serializerType);
                        if (serializer != null)
                        {
                            flag = (obj != serializer);
                            obj  = serializer;
                        }
                    }
                    num++;
                }
            }
            return(obj);
        }
Beispiel #3
0
        public void Ctor_ProviderType(Type providerType)
        {
            var attribute = new DefaultSerializationProviderAttribute(providerType);

            Assert.Equal(providerType.AssemblyQualifiedName, attribute.ProviderTypeName);
        }