Я беру часть работы для клиента, и у меня возникла проблема с сериализацией / десериализацией одной из моих клиентских моделей.
Вот немного контекста.
У моего клиента есть веб-сайт asp. net (смесь MVC + WebApi), и пользователи могут запрашивать создание документов. Текущий процесс включает в себя переход от веб-сайта к другому API (назовем его для простоты PDF api) для создания PDF. По разным причинам я хочу переместить этот запрос через механизм очередей. Большая часть этого уже существует, однако камень преткновения, который у меня есть в данный момент, заключается в том, что модель (запрос в формате pdf), передаваемая в Api, включает свойство типа HttpCook ie.
HTTP-запрос из Интернета в API PDF работает нормально, при этом объект запроса PDF, полученный Api, включает свойство HttpCook ie, и он полностью заполняется, включая HttpValueCollection (свойство Values) Тип HttpCook ie.
Однако, как часть моего перехода к использованию очереди сообщений, мне нужно сериализовать объект запроса PDF и десериализовать его по получении обработчиком очереди. Запрос PDF содержит свойство HttpCook ie, а HttpValueCollection этого cook ie не сериализуется, поэтому десериализация не выполняется со следующей ошибкой:
«Невозможно заполнить тип списка System.Web.HttpValueCollection».
Мне любопытно, почему конвейер запросов Http в. net поддерживает сериализацию / десериализацию HttpCook ie в моем параметре метода действия в API PDF, но явная сериализация / десериализация не работает.
Быстрое подтверждение. Идея передачи HttpCook ie для типа, переданного, используемого очередью сообщений, безумна. Однако я пытаюсь ограничить объем своих изменений, поэтому не хочу реорганизовывать код потребления (конечная точка pdf api), чтобы использовать модель без HttpCook ie, если я могу помочь (технический долг перед решу позже). Правильный ответ - не использовать везде HttpCook ie и не ссылаться на System.Web там, где он не принадлежит. Возможно, это будет мой следующий подход.
Мне бы хотелось подумать / объяснить, почему это работает в одном контексте, но не работает в другом (используя Json. net).