Вручную десериализовать XML WebRequest - PullRequest
0 голосов
/ 22 декабря 2010

ТАК У меня есть веб-сервис ASMX, который возвращает массив объектов результатов поиска.Когда я вызываю WebMethod через браузер, генерируется следующий XML ...

 <?xml version="1.0" encoding="utf-8"?><ArrayOfSearchResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"><SearchResult>
<Name>Rock Salt Steak House</Name>
<BusinessType>Steakhouses</BusinessType>
<Rating>mStar30</Rating>
<Address>1232 Westlake Ave N</Address>
<City>Seattle</City>
<State>WA</State>
<Phone>(206) 284-1047</Phone>
<Zip>98109</Zip></SearchResult><SearchResult>
<Name>Laredos Grill</Name>
<BusinessType>Tex-Mex Bars</BusinessType>
<Rating>mStar35</Rating>
<Address>555 Aloha St Ste 100</Address>
<City>Seattle</City>
<State>WA</State>
<Phone>(206) 218-1040</Phone>
<Zip>98109</Zip></SearchResult>.......

Этот XML сохраняется в файле для последующей десериализации.Проблема в том, что я не могу снова его сериализовать.Вот код, который я использую ....

    XmlSerializer serializer = new XmlSerializer(typeof(List<Service.SearchResult>));
    using (StringReader stringReader = new StringReader(strXMLContent)) // can throw ArgumentNullException
    {

        using (XmlReader xmlReader = XmlReader.Create(stringReader))
        {
            //xmlReader.Read();
            return ((List<Service.SearchResult>)serializer.Deserialize(xmlReader)).ToArray(); // can throw SerializationException

        }
    }

Я получаю сообщение об ошибке "в XML-документе (2,2) есть ошибка", а внутреннее исключение - (InnerException = {"ArrayOfSearchResultxmlns = 'http://tempuri.org/' не ожидалось. "})

Конечно, при вызове этого WebMethod в коде коллекция легко падает.До тех пор, пока я не попытаюсь вручную десериализовать позже, я просто схожу с ума.

Любые идеи будут высоко оценены ...

Спасибо!

1 Ответ

0 голосов
/ 22 декабря 2010

Во-первых, почему вы звоните через WebRequest? Почему бы просто не использовать «Add Service Reference» и использовать прокси-класс?

Во-вторых, когда вы вызываете его в браузере, вы не используете SOAP. Обратите внимание на отсутствие конверта SOAP в ответе.

...