Udostępnij za pośrednictwem


IStateFormatter Interfejs

Definicja

Definiuje metody implementujące typ w celu serializacji i deserializacji grafu obiektu.

public interface class IStateFormatter
public interface IStateFormatter
type IStateFormatter = interface
Public Interface IStateFormatter
Pochodne

Przykłady

W poniższym przykładzie kodu pokazano, jak utworzyć PageStatePersister obiekt, który zapisuje stan widoku i kontroli w strumieniu na serwerze sieci Web. Klasa StreamPageStatePersister pokazuje, jak zastąpić Load metody i Save w celu wyodrębnienia i zapisania informacji o stanie strony. Te metody używają interfejsu IStateFormatter dziedziczonego PageStatePersister z klasy do serializacji i deserializacji stanu widoku. Ten przykład kodu jest częścią większego przykładu udostępnionego PageStatePersister dla klasy .

namespace Samples.AspNet.CS
{

    using System;
    using System.IO;
    using System.Security.Permissions;
    using System.Web;
    using System.Web.UI;

    //
    // The StreamPageStatePersister is an example view state
    // persistence mechanism that persists view and control
    // state on the Web server.
    //
    [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
    public class StreamPageStatePersister : PageStatePersister
    {

        public StreamPageStatePersister(Page page)
            : base(page)
        {
        }
        //
        // Load ViewState and ControlState.
        //
        public override void Load()
        {
            Stream stateStream = GetSecureStream();

            // Read the state string, using the StateFormatter.
            StreamReader reader = new StreamReader(stateStream);

            IStateFormatter formatter = this.StateFormatter;
            string fileContents = reader.ReadToEnd();

            // Deserilize returns the Pair object that is serialized in
            // the Save method.
            Pair statePair = (Pair)formatter.Deserialize(fileContents);

            ViewState = statePair.First;
            ControlState = statePair.Second;
            reader.Close();
            stateStream.Close();
        }
        //
        // Persist any ViewState and ControlState.
        //
        public override void Save()
        {

            if (ViewState != null || ControlState != null)
            {
                if (Page.Session != null)
                {
                    Stream stateStream = GetSecureStream();

                    StreamWriter writer = new StreamWriter(stateStream);

                    IStateFormatter formatter = this.StateFormatter;
                    Pair statePair = new Pair(ViewState, ControlState);

                    // Serialize the statePair object to a string.
                    string serializedState = formatter.Serialize(statePair);

                    writer.Write(serializedState);
                    writer.Close();
                    stateStream.Close();
                }
                else
                {
                    throw new InvalidOperationException("Session needed for StreamPageStatePersister.");
                }
            }
        }
        // Return a secure Stream for your environment.
        private Stream GetSecureStream()
        {
            // You must provide the implementation to build
            // a secure Stream for your environment.
            return null;
        }
    }
}
Imports System.IO
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI

Namespace Samples.AspNet.VB

    ' The StreamPageStatePersister is an example view state
    ' persistence mechanism that persists view and control
    ' state on the Web server.
    '
    <AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
    Public Class StreamPageStatePersister
        Inherits PageStatePersister


        Public Sub New(ByVal page As Page)
            MyBase.New(page)
        End Sub

        '
        ' Load ViewState and ControlState.
        '
        Public Overrides Sub Load()

            Dim stateStream As Stream
            stateStream = GetSecureStream()

            ' Read the state string, using the StateFormatter.
            Dim reader As New StreamReader(stateStream)

            Dim serializedStatePair As String
            serializedStatePair = reader.ReadToEnd
            Dim statePair As Pair

            Dim formatter As IStateFormatter
            formatter = Me.StateFormatter

            ' Deserilize returns the Pair object that is serialized in
            ' the Save method.      
            statePair = CType(formatter.Deserialize(serializedStatePair), Pair)

            ViewState = statePair.First
            ControlState = statePair.Second
            reader.Close()
            stateStream.Close()
        End Sub

        '
        ' Persist any ViewState and ControlState.
        '
        Public Overrides Sub Save()

            If Not (ViewState Is Nothing) OrElse Not (ControlState Is Nothing) Then
                If Not (Page.Session Is Nothing) Then

                    Dim stateStream As Stream
                    stateStream = GetSecureStream()

                    ' Write a state string, using the StateFormatter.
                    Dim writer As New StreamWriter(stateStream)

                    Dim formatter As IStateFormatter
                    formatter = Me.StateFormatter

                    Dim statePair As New Pair(ViewState, ControlState)

                    Dim serializedState As String
                    serializedState = formatter.Serialize(statePair)

                    writer.Write(serializedState)
                    writer.Close()
                    stateStream.Close()
                Else
                    Throw New InvalidOperationException("Session needed for StreamPageStatePersister.")
                End If
            End If
        End Sub
        ' Return a secure Stream for your environment.
        Private Function GetSecureStream() As Stream
            ' You must provide the implementation to build
            ' a secure Stream for your environment.
            Return Nothing
        End Function
    End Class
End Namespace

Uwagi

Interfejs IStateFormatter definiuje metody, które typ może implementować w celu serializacji i deserializacji stanu, który ASP.NET kontrolki serwera sieci Web utrzymuje we właściwości ViewState . Ta infrastruktura jest używana przez klasy pochodzące z PageStatePersister klasy w celu zachowania stanu strony ASP.NET między żądaniami. Domyślnie stan strony ASP.NET jest serializowany i deserializowany przez wystąpienie ObjectStateFormatter klasy, jednak deweloperzy witryn i kart mogą implementować IStateFormatter interfejs na własnych typach, aby wykonać tę pracę.

Aby uzyskać więcej informacji na temat zarządzania stanem kontroli serwera sieci Web i stanu widoku, zobacz ASP.NET State Management Overview (Omówienie zarządzania stanem) i Dynamic Web Server Controls (Dynamiczne kontrolki serwera sieci Web) i View State (Stan widoku).

Metody

Deserialize(String)

Deserializuje wykres stanu obiektu na podstawie postaci serializacji ciągu.

Serialize(Object)

Serializuje ASP.NET stan kontroli serwera sieci Web w celu utworzenia ciągu.

Dotyczy

Zobacz też