我使用以下代码从我的网址中获取 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);
在这里调试时,我可以看到反序列化.songs.items 列表有 11 个元素。
但是当涉及到最后一行时,歌曲列表有 0 元素。为什么我不能分配"反序列化.歌曲.项目"对象 对歌曲列表的价值?
如果我按如下方式使用它:
SongList.ItemsSource = deserialized.songs.items;
我可以在主页上看到数据列表。
顺便说一句,这是我第一次编写C#,我是一名Java开发人员。所以如果这是一个蹩脚的问题,对不起。
对 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/"));