File: compmod\system\componentmodel\design\serialization\IDesignerSerializationProvider.cs
Project: ndp\fx\src\System.csproj (System)
//------------------------------------------------------------------------------
// <copyright file="IDesignerSerializationProvider.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------
 
namespace System.ComponentModel.Design.Serialization {
 
    using System;
 
    /// <devdoc>
    ///     This interface defines a custom serialization provider.  This
    ///     allows outside objects to control serialization by providing
    ///     their own serializer objects.
    /// </devdoc>
    public interface IDesignerSerializationProvider {
    
        /// <devdoc>
        ///     This will be called by the serialization manager when it 
        ///     is trying to locate a serialzer for an object type.
        ///     If this serialization provider can provide a serializer
        ///     that is of the correct type, it should return it.
        ///     Otherwise, it should return null.
        ///
        ///     In order to break order dependencies between multiple
        ///     serialization providers the serialization manager will
        ///     loop through all serilaization provideres until the 
        ///     serilaizer returned reaches steady state.  Because
        ///     of this you should always check currentSerializer
        ///     before returning a new serializer.  If currentSerializer
        ///     is an instance of your serializer, then you should
        ///     either return it or return null to prevent an infinite
        ///     loop.
        /// </devdoc>
        object GetSerializer(IDesignerSerializationManager manager, object currentSerializer, Type objectType, Type serializerType);
    }
}