Прочитать на английском

Поделиться через


IStateFormatter Интерфейс

Определение

Определяет методы, реализуемые типом для сериализации и десериализации графы объекта.

C#
public interface IStateFormatter
Производный

Примеры

В следующем примере кода показано, как создать PageStatePersister объект, сохраняющий состояние представления и управления в потоке на веб-сервере. Класс StreamPageStatePersister демонстрирует, как переопределить Load методы и Save для извлечения и сохранения сведений о состоянии страницы. Эти методы используют интерфейс, IStateFormatter наследуемый от PageStatePersister класса , для сериализации и десериализации состояния представления. Этот пример входит в состав более крупного примера использования класса PageStatePersister.

C#
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;
        }
    }
}

Комментарии

Интерфейс IStateFormatter определяет методы, которые тип может реализовать для сериализации и десериализации состояния, которое серверный веб-элемент управления ASP.NET сохраняет в своем ViewState свойстве. Эта инфраструктура используется классами, производными от класса , PageStatePersister для поддержания состояния страницы ASP.NET между запросами. По умолчанию ASP.NET состояние страницы сериализуется и десериализируется ObjectStateFormatter экземпляром класса . Однако разработчики сайтов и адаптеров могут реализовать IStateFormatter интерфейс в своих типах для выполнения этой работы.

Дополнительные сведения об управлении состоянием веб-сервера и просмотре состояния см. в разделах Общие сведения об управлении состоянием ASP.NET и Динамические серверные веб-элементы управления и просмотр состояния.

Методы

Deserialize(String)

Выполняет десериализацию графы состояния объекта из его сериализованной формы строки.

Serialize(Object)

Выполняет сериализацию состояния элемента управления ASP.NET веб-сервера в форму строки.

Применяется к

Продукт Версии
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

См. также раздел