2010-12-14 38 views
3

J'ai créé une application de service Web dans Windows Phone 7. C'est un tableau JSON obtenu à partir de l'uri ci-dessous. ... [{"id": 4, "name": "Bangalore"}, {"id": 1, "nom": "Chennai"}, {"id": 3, "nom": "Hyderabad "}, {" id ": 2," name ":" Mumbai "}] ...Comment désérialiser un tableau ou un objet JSON de service Web?

Liste item = (Liste) ds.ReadObject (msnew); Dans cette ligne un bug (il dit en cours d'exécution). alt text Une erreur s'est produite lors de la désérialisation de l'objet de type. Les données au niveau de la racine ne sont pas valides. Ligne 1, 1.

codage:

MainPage public() { 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); 
    } 

Répondre

9

Il y a 2 erreurs dans ce que vous essayez de faire.

  1. Vous utilisez DataContractSerializer au lieu de DataContractJsonSerializer. Celui que vous essayez d'utiliser attend XML, pas JSON.

  2. Vous essayez de désérialiser en un seul Item puis de le convertir en un List<Item>, plutôt qu'un tableau, ce que contient json.

Essayez ceci:

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

Si vous voulez plus tard, vous pouvez convertir le tableau à une liste.

+0

Merci beaucoup yaar, ça marche bien. je l'ai fait. – selladurai

1

Vous pouvez ajouter la bibliothèque System.Json de Silverlight SDK.
Il n'est pas compilé pour WP7, mais pour moi ça fonctionne bien.