无法使用JsonConvert.DeserializeObject

时间:2013-09-09 12:10:07

标签: c# json windows-phone-8 json.net

我正在使用以下代码从我的网址中获取json列表:

  List<Item> songList = new List<Item>();

  var w = new SharpGIS.GZipWebClient();

  Observable.FromEvent<DownloadStringCompletedEventArgs>(w, "DownloadStringCompleted")
    .Subscribe(r =>
    {
        var deserialized = JsonConvert.DeserializeObject<Phone>(r.EventArgs.Result);
                  songList = deserialized.songs.items;

     });
  w.DownloadStringAsync(new Uri("http://myURL.com/"));

  List<ExtendedItem> extendedItemList = organizeBundleAndUri(songList);

这里调试时我可以看到deserialized.songs.items列表有11个元素。

但是当谈到最后一行时,songList有0个元素。为什么我不能将“deserialized.songs.items”对象设为对象  值为songList?

如果我按照以下方式使用它:

  SongList.ItemsSource = deserialized.songs.items;

我可以在主页上看到数据列表。

顺便说一下,这是我第一次编写C#,我是一名Java开发人员。所以,如果这是一个蹩脚的问题,抱歉。

1 个答案:

答案 0 :(得分:0)

DownloadStringAsync的调用是异步的,因此会在分配songList之前立即返回。在回调中下载歌曲列表后,您需要执行您想要执行的所有操作(r =>之后的块中的代码)。如果这意味着你调用一个方法,那也是有效的:

 List<Item> songList = new List<Item>();

 var w = new SharpGIS.GZipWebClient();

 Observable.FromEvent<DownloadStringCompletedEventArgs>(w, "DownloadStringCompleted")
    .Subscribe(r =>
    {
        var deserialized = JsonConvert.DeserializeObject<Phone>(r.EventArgs.Result);
                  songList = deserialized.songs.items;

        List<ExtendedItem> extendedItemList = organizeBundleAndUri(songList);
        // DoSomethingElse(extendedItemList);
    });
 w.DownloadStringAsync(new Uri("http://myURL.com/"));