2014-01-31 2 views
0

Привет в приложении Windows Phone 8 У меня возникла проблема с десериализацией xml из загрузки webclient. Я жду в DownloadStringCompletedEvent, а затем использую следующий код.Deserializing xml от webclient на телефоне Windows

private void PopularDownloaded(object sender, DownloadStringCompletedEventArgs e) 
    { 
     if (e.Result == null || e.Error != null) 
     { 
      MessageBox.Show("There was an error connecting to the server"); 
     } 
     else 
     { 
      //MessageBox.Show(e.Result.ToString()); 
      XDocument loadedpopData = XDocument.Load(e.Result); 

      var popdata = from query in loadedpopData.Descendants("pattern") 
          select new poppatterns 
          { 
           Title = (string)query.Element("title"), 
           UserName = (string)query.Element("userName"), 
           DateCreated = (string)query.Element("dateCreated"), 
           ImageUrl = (string)query.Element("imageUrl"), 
           ApiUrl = (string)query.Element("apiUrl"), 
          }; 
      poplonglist.ItemsSource = popdata.ToList(); 
     } 
    } 

, но он бросает следующее исключение:

Необработанное исключение типа «System.Reflection.TargetInvocationException» произошло в System.Windows.ni.dll

Если я, но локальный файл XML в проекте, а затем загрузить его, как этот

XDocument loadedpopData = XDocument.Load("Resources/top.xml"); 

он загружает нормально, так что должно быть что-то с

XDocument loadedpopData = XDocument.Load(e.Result); 

Я пробовал посмотреть на e.Result и это правильные данные.

Любые идеи, что я делаю неправильно ???

ответ

2

В e.Result у вас есть строка XML, но XDocument.Load(string) для загрузки данных из файла, а строка аргумента путь к файлу, вы должны использовать XDocument.Parse(e.Result) для загрузки XDocument из XML строковых данных.

сообщение в MSDN о Load: XDocument.Load()

сообщение в MSDN о Parse: XDocument.Parse()

+0

Спасибо, что сделал это .. –

1

Изменение этой линии

//MessageBox.Show(e.Result.ToString()); 
      XDocument loadedpopData = XDocument.Load(e.Result); 

в

//MessageBox.Show(e.Result.ToString()); 
      XDocument loadedpopData = XDocument.Parse(e.Result); 
+0

Спасибо, что сделал это .. Я взял римлянина как ответы, потому что он был первым .. :-) –

+0

:) Это не имеет значения, насколько вы решили свою проблему. –

0

быстрого образца для приготовления пищи. и результат, а также, из LINQPad

код:

var xml = new XElement("root"); 

for (var i = 0; i <10; i++) 
{ 
    xml.Add(new XElement("pattern", new XElement("title", "title" + i.ToString()), 
    new XElement("title", "title" + i.ToString()), 
    new XElement("userName", "userName" + i.ToString()), 
    new XElement("dateCreated", "dateCreated" + i.ToString()), 
    new XElement("imageUrl", "ImageUrl" + i.ToString()), 
    new XElement("apiUrl", "ApiUrl" + i.ToString()))); 
} 

var xmlString = xml.ToString(); 
var loadedpopData = XDocument.Parse(xmlString); 
var popdata = from query in loadedpopData.Descendants("pattern") 
        select new { 
          Title = (string)query.Element("title"), 
          UserName = (string)query.Element("userName"), 
          DateCreated = (string)query.Element("dateCreated"), 
          ImageUrl = (string)query.Element("imageUrl"), 
          ApiUrl = (string)query.Element("apiUrl"), 
         }; 
popdata.Dump(); 

Результат:

Название UserName DateCreated ImageUrl ApiUrl title0 userName0 dateCreated0 ImageUrl0 ApiUrl0 title1 USERNAME1 dateCreated1 ImageUrl1 ApiUrl1 title2 USERNAME2 dateCreated2 ImageUrl2 ApiUrl2 title3 userName3 dateCreated3 ImageUrl3 ApiUrl3 title4 пользовательName4 датаCreated4 ImageUrl4 ApiUrl4 title5 userName5 d ateCreated5 ImageUrl5 ApiUrl5 TITLE6 userName6 dateCreated6 ImageUrl6 ApiUrl6 TITLE7 userName7 dateCreated7 ImageUrl7 ApiUrl7 TITLE8 userName8 dateCreated8 ImageUrl8 ApiUrl8 title9 userName9 dateCreated9 ImageUrl9 ApiUrl9