2010-12-14 16 views
3

Ich habe eine Web-Service-Anwendung in Windows Phone 7 erstellt. Dies ist JSON-Array von unten uri erhalten. ... [{"id": 4, "name": "Bangalore"}, {"id": 1, "name": "Chennai"}, {"id": 3, "name": "Hyderabad "}, {" id ": 2," Name ":" Mumbai "}] ...Wie Deserialisieren von Web-Service-JSON-Array oder -Objekt?

Listenelement = (Liste) ds.ReadObject (msnew); In dieser Zeile ein Fehler (es sagt während des Laufs). alt text Fehler beim Deserialisieren des Objekts von "Type.Data" auf der Stammebene ist ungültig. Zeile 1, Position 1

Codierung:

public Mainpage() { InitializeComponent(); }

[DataContract] 
    public class Item 
    {   

     [DataMember] 
     public int id 
     { 
      get; 
      set; 
     } 

     [DataMember] 
     public string name 
     { 
      get; 
      set; 
     } 
    } 
    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     WebClient wc = new WebClient(); 
     wc.DownloadStringAsync(new Uri("http://75.101.161.83:8080/CityGuide/[email protected]$pir*$y$t*m$13GUID*5")); 
     wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); 
    } 

    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     string MyJsonString = e.Result; 
     // MessageBox.Show(e.Result); 
     DataContractSerializer ds = new DataContractSerializer(typeof(Item)); 
     MemoryStream msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString)); 
     List<Item> item = (List<Item>)ds.ReadObject(msnew); 
    } 

Antwort

9

Es gibt zwei Fehler in dem, was Sie versuchen zu tun.

  1. Sie verwenden DataContractSerializer statt DataContractJsonSerializer. Dasjenige, das Sie verwenden möchten, erwartet XML und nicht JSON.

  2. Sie versuchen, zu einem einzigen Item zu deserialisieren und dann das zu einem List<Item> konvertieren, anstatt ein Array, das ist, was JSON enthält.

Versuchen Sie stattdessen:

var ds = new DataContractJsonSerializer(typeof(Item[])); 
    var msnew = new MemoryStream(Encoding.UTF8.GetBytes(MyJsonString)); 
    Item[] items = (Item[])ds.ReadObject(msnew); 

Wenn Sie später wollten, können Sie das Array in eine Liste umwandeln könnte.

+0

Vielen Dank yaar, es funktioniert gut. Ich habe es getan. – selladurai

1

Sie können System.Json Bibliothek von Silverlight SDK hinzuzufügen.
Es ist nicht für WP7 kompiliert, aber für mich funktioniert es gut.

Verwandte Themen