2010-12-14 13 views
3

私はWindows Phone 7で1つのWebサービスアプリケーションを作成しました。これは下位URIから取得するJSON配列です。 ... [{"id":4、 "name": "Bangalore"}、{"id":1、 "name": "Chennai"}、{"id":3、 "name": "ハイデラバード"}、{" id ":2、" name ":" Mumbai "}] ...WebサービスJSON配列またはオブジェクトからデシリアライズするには?

リストアイテム=(リスト)ds.ReadObject(msnew); この行には1つのバグ(実行中に表示されます)。 alt text type.Dataのオブジェクトを逆シリアル化する際にルートレベルのデータが無効です。行1、位置1

コーディング:

パブリックメインページ(){ の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); 
    } 

答えて

9

あなたがしようとしていることには2つの間違いがあります。

  1. 代わりDataContractJsonSerializerDataContractSerializerを使用しています。使用しようとしているものは、JSONではなくXMLが必要です。

  2. Itemにデシリアライズしてから、jsonに含まれている配列ではなくList<Item>に変換しようとしています。

代わりにこれを試してみてください:

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

後でしたい場合、あなたはリストに配列を変換することができます。

+0

ありがとうございましたyaar、うまくいきます。私はそれをしました。 – selladurai

1

あなたは、SilverlightのSDKからSystem.Jsonライブラリを追加することができます。
WP7用にはコンパイルされていませんが、私にとってはうまくいきます。

関連する問題