ASP.NET C # сериализует HttpValueCollection - PullRequest
1 голос
/ 31 марта 2011

Я пытаюсь сериализовать объект Request для целей ведения журнала.Код

System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(obj.GetType());
// obj is a Request object

дает мне следующее исключение:

To be XML serializable, types which inherit from ICollection must have an implementation of Add(System.String) at all levels of their inheritance hierarchy. System.Web.HttpValueCollection does not implement Add(System.String).

Как решить проблему?Спасибо.

Ответы [ 3 ]

1 голос
/ 31 марта 2011

Короче говоря, попытка сериализации объекта http-запроса может закончиться неудачно; даже если вы преодолеете текущую проблему, я ожидаю, что она выйдет из строя еще в нескольких местах.

Вы должны создать свою собственную объектную модель, которая включает в себя те части запроса, которые вас интересуют, в простой форме. В случае HttpValueCollection вам может понадобиться добавить базовую коллекцию некоторого типа, которая представляет собой пару имя / значение.

Затем: заполните вашу новую модель из фактического запроса и сериализуйте вашу модель.

0 голосов
/ 19 октября 2013

Я не пробовал, но это, вероятно, сработает и будет доступно для сериализации.

HttpContext.Current.Request.GetType()
                .GetProperties()
                .Select(
                    a =>
                        new KeyValuePair<object, object>(a, HttpContext.Current.Request.GetType().GetProperty(a.GetType().Name)))
                .ToList();
0 голосов
/ 31 марта 2011

Если вас интересует запрос в целом (т. Е. Байты), вы можете использовать свойство HttpRequest.Filter .Он позволяет установить фильтр (объект, производный от Stream), который может читать и писать из необработанного входного HTTP-запроса.

Вот статья на эту тему: Фильтрация HTTP-запросов с помощью .NET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...