Анализ результатов от WCF WebHttp Service - PullRequest
0 голосов
/ 10 мая 2011

У меня работает очень простая служба WCF, которая возвращает следующее (из базового нового проекта) xml:

  <ArrayOfSampleItem xmlns="http://schemas.datacontract.org/2004/07/WcfRestService1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
     <SampleItem>
         <Id>1</Id>
         <StringValue>Hello</StringValue>
     </SampleItem>
  </ArrayOfSampleItem>

Затем я использую это в приложении Windows Phone 7. Результат возвращается нормально, но у меня проблемы с анализом XML. Это код, который я использую для обратного вызова после завершения запроса:

        XDocument xmlDoc = XDocument.Parse(e.Result);

        itemsFetched.ItemsSource = from item in xmlDoc.Descendants("SampleItem")
                                   select new Product()
                                              {
                                                  Id = item.Element("Id").Value,
                                                  StringValue = item.Element("StringValue").Value
                                              };

Коллекция не заполняется этим, когда я пытаюсь добавить пространство имен:

        XNamespace web = "http://schemas.datacontract.org/2004/07/WcfRestService1";

        XDocument xmlDoc = XDocument.Parse(e.Result);

        itemsFetched.ItemsSource = from item in xmlDoc.Descendants(web + "SampleItem")

Элемент найден, но я получаю пустое исключение при попытке получить значение Id.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 10 мая 2011

Итак, xmlns="..." помещает элементы и все их потомки в пространство имен, поэтому вам нужно использовать XNamespace объект web везде, где вы получаете доступ к элементам:

XDocument xmlDoc = XDocument.Parse(e.Result);
XNamespace web = "http://schemas.datacontract.org/2004/07/WcfRestService1";

itemsFetched.ItemsSource = from item in xmlDoc.Descendants(web + "SampleItem")
                           select new Product()
                                              {
                                                  Id = item.Element(web + "Id").Value,
                                                  StringValue = item.Element(web + "StringValue").Value
                                              };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...