Есть ли у вас представление о ожидаемом выходе? Напр. это будет?
>>> 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>
>>>
Король, я подозреваю, что хорошее место, чтобы начать смотреть является решениями, которые сжимают ViewState - они захватывают ViewState на сервере, прежде чем это будет отправлено вниз клиенту и gzipping его. Это точно, где Вы хотите быть.
Посмотрите этот сообщение в блоге , где автор описывает метод для переопределения поведения по умолчанию для генерации ViewState и вместо этого показывает, как сохранить его на объекте Сессии сервера.
В ASP.NET 2.0, ViewState сохраняется потомком класса PageStatePersister. Этот класс является абстрактным классом для сохранения и загрузки ViewsState и существует два реализованных потомка этого класса в.Net Платформе, названной HiddenFieldPageStatePersister и SessionPageStatePersister. По умолчанию HiddenFieldPageStatePersister используется для сохранения/загружения информации о ViewState, но мы можем легко заставить SessionPageStatePersister работать и сохранять ViewState в объекте Сессии.
, Хотя я не протестировал его код, это, кажется, показывает точно, что Вы хотите: способ получить доступ к ViewState кодирует в то время как все еще на сервере перед обратной передачей.
Я включил сжатие после подобных статей к отправленным выше. Ключ к доступу к ViewState перед приложением отправляет, это переопределяло этот метод;
protected override void SavePageStateToPersistenceMedium(object viewState)
можно назвать базовый метод в рамках этого переопределения и затем добавить любую дополнительную логику, которой Вы требуете для обработки ViewState.