5

Mam trochę kodu dla Windows Phone 7, dla aplikacji RSS:DataContractSerializer nie dane zerowe

private RSSSettings DeserializeSettings(string data) 
    { 
     RSSSettings rsssettings; 
     try 
     { 
      var ser = new DataContractSerializer(typeof(RSSSettings)); 
      using (var sr = new StringReader(data)) 
      using (var xr = XmlReader.Create(sr)) 
       rsssettings = (RSSSettings)ser.ReadObject(xr); 
     } 
     catch (Exception ex) 
     { 
      ex.ToString(); 
      rsssettings = new RSSSettings() { Version = -1 }; 
     } 
     return rsssettings; 
    } 

doskonale działa na Windows Phone 7. I przeniesiony aplikacji na Windows Phone 8, a wszystko w przeciwnym razie działa w aplikacji z wyjątkiem tego fragmentu.

Porównując to, co dzieje się w Windows Phone 7 i 8, "rsssettings" w WP8 pozostaje puste, podczas gdy poprawnie zapełnia się w WP7. W tej części kodu nie było żadnych zmian w kodzie.

Wszystko działa tak samo, dopóki:

rsssettings = (RSSSettings)ser.ReadObject(xr); 

Wyjątkiem nie nazywa.

Ktoś ma pojęcie, jak rozwiązać ten frustrujący problem?

+0

Zacznę od porównania zawartości obiektu danych między dwoma pierwszymi. Czy oni są tacy sami? – Bryant

+0

Obiekt danych jest dokładnie taki sam. To właśnie mnie tak zdezorientowało :( – ReignOfComputer

+0

Dane w obu przypadkach to XML, oba przypadki wydają się przenosić dane aż do tej linii, co podkreślono – ReignOfComputer

Odpowiedz

12

Tak, to ci się nie spodoba.

DataContractSerializer na WP8 wymaga alfabetycznego uporządkowania elementów XML. Robi się to od założenia, że ​​wszystko, co przechodzi do DataContractSerializer, pochodzi z innego DataContractSerializer.

Żałuję, że tego nie robiłem, ale nie jestem. Od MSDN na App platform compatibility for Windows Phone: klasa

DataContractSerializer

WP8 Zachowanie: elementy XML musi być sortowane alfabetycznie.

WP7 Zachowanie: Elementy XML mogą być nieuporządkowane.

Istnieje kilka alternatyw dla Ciebie w tym momencie:

  1. alfabetycznie kolejności XML. Nie, to naprawdę nie jest opcja.
  2. Ponieważ wydaje się, że uzyskujesz RSS, możesz rozważyć użycie WCF's System.ServiceModel.Syndication.SyndicationFeed, który jest specyficznie zbudowany dla RSS/Atom. Więcej na ten temat na ten great article przez Den Delimarsky.
  3. Jeśli korzystasz z XML-a innego niż RSS, zastanów się nad użyciem prostego szeregowania Xml z XmlSerializer. Dla moich pieniędzy jest to najlepszy i najprostszy sposób na przeprowadzenie serializacji XML i deserializację.
  4. Zmiana zachowania z WP7 na WP8 jest włączana w trybie Quirks. Oznacza to, że aplikacje WP7 działające na WP8 nadal będą działać poprawnie. Jeśli Twoja aplikacja nie korzysta z zestawów funkcji WP8, możesz zachować całą aplikację jako aplikację WP7.
+0

Omg Cóż, to będzie trudne:/ Dzięki ! – ReignOfComputer

Powiązane problemy