Как получить значение созданного, закодированного ViewState?

Есть ли у вас представление о ожидаемом выходе? Напр. это будет?

>>> f  = FileItem("/foo/bar")
>>> magic(f)
'{"fname": "/foo/bar"}'

В этом случае вы можете просто называть json.dumps(f.__dict__).

Если вам нужен более индивидуальный вывод, вам придется подклассы JSONEncoder и реализовать свою собственную сериализацию.

Для тривиального примера см. ниже.

>>> from json import JSONEncoder
>>> class MyEncoder(JSONEncoder):
        def default(self, o):
            return o.__dict__    

>>> MyEncoder().encode(f)
'{"fname": "/foo/bar"}'

Затем вы передаете этот класс в метод json.dumps() как cls kwarg:

json.dumps(cls=MyEncoder)

Если вы также хотите декодировать, вам нужно будет поставить пользовательский object_hook в класс JSONDecoder . Например,

>>> def from_json(json_object):
        if 'fname' in json_object:
            return FileItem(json_object['fname'])
>>> f = JSONDecoder(object_hook = from_json).decode('{"fname": "/foo/bar"}')
>>> f
<__main__.FileItem object at 0x9337fac>
>>> 

26
задан Ijas Ameenudeen 20 January 2019 в 13:46
поделиться

3 ответа

Король, я подозреваю, что хорошее место, чтобы начать смотреть является решениями, которые сжимают ViewState - они захватывают ViewState на сервере, прежде чем это будет отправлено вниз клиенту и gzipping его. Это точно, где Вы хотите быть.

12
ответ дан Jeff Atwood 28 November 2019 в 17:24
поделиться

Посмотрите этот сообщение в блоге , где автор описывает метод для переопределения поведения по умолчанию для генерации ViewState и вместо этого показывает, как сохранить его на объекте Сессии сервера.

В ASP.NET 2.0, ViewState сохраняется потомком класса PageStatePersister. Этот класс является абстрактным классом для сохранения и загрузки ViewsState и существует два реализованных потомка этого класса в.Net Платформе, названной HiddenFieldPageStatePersister и SessionPageStatePersister. По умолчанию HiddenFieldPageStatePersister используется для сохранения/загружения информации о ViewState, но мы можем легко заставить SessionPageStatePersister работать и сохранять ViewState в объекте Сессии.

, Хотя я не протестировал его код, это, кажется, показывает точно, что Вы хотите: способ получить доступ к ViewState кодирует в то время как все еще на сервере перед обратной передачей.

4
ответ дан Yaakov Ellis 28 November 2019 в 17:24
поделиться

Я включил сжатие после подобных статей к отправленным выше. Ключ к доступу к ViewState перед приложением отправляет, это переопределяло этот метод;

protected override void SavePageStateToPersistenceMedium(object viewState)

можно назвать базовый метод в рамках этого переопределения и затем добавить любую дополнительную логику, которой Вы требуете для обработки ViewState.

2
ответ дан Dave Anderson 28 November 2019 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: