public void Ctor_Name(string providerTypeName) { var attribute = new DefaultSerializationProviderAttribute(providerTypeName); Assert.Same(providerTypeName, attribute.ProviderTypeName); }
/// <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); }
public void Ctor_ProviderType(Type providerType) { var attribute = new DefaultSerializationProviderAttribute(providerType); Assert.Equal(providerType.AssemblyQualifiedName, attribute.ProviderTypeName); }