我正在使用以下代码从我的网址中获取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开发人员。所以,如果这是一个蹩脚的问题,抱歉。
答案 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/"));