C#反序列化的問題?

private async void test(string key)
{
var url = string.Format("https://osu.ppy.sh/api/get_beatmaps?k={0}m=0s=617301", key);
HttpClient http = new HttpClient();
var repsone = await http.GetAsync(url);
var result = await repsone.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(RootObject));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = serializer.ReadObject(ms) as RootObject;
}

代碼如上所示..通過通過HttpClient請求到Json後,準備反序列化..我不知道為啥創建MemoryStream流時,ReadTimeout和WitemTimeout會異常,

result應該也沒問題吧?


既然標籤裡面有UWP,那我還是建議你用Newtonsoft.Json來做序列化和反序列化,比微軟自己的DataContract serializer好用不少。


Stream 的 Read/WriteTimeout 默認就是直接 throw InvalidOperationException,而 MemoryStream 沒有覆蓋這兩個屬性,所以那兩個屬性顯示有異常是正常的。

反序列化肯定是可以成功的,畢竟 result 里都看到了 Beatmap 的信息了。

PS:建議直接用 GetStreamAsync() 來反序列化,獲取字元串再變回 byte[] 再反序列化增加了多餘的負擔……


我看到的代碼是這樣:

private async void test(string key)
{
var url = string.Format("https://osu.ppy.sh/api/get_beatmaps?k={0}m=0s=617301", key);
HttpClient http = new HttpClient();
var repsone = await http.GetAsync(url);
var result = await repsone.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(RootObject));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = serializer.ReadObject(ms) as RootObject;
}

沒有人注意到 ,第一行的錯誤嗎?

要用 async Task,而不是async void。強迫症發作的補充。


推薦閱讀:

未來將會有哪些主流軟體發布UWP版本?
現在是進入 Windows Universal Platform 開發的好時機嗎?
如何評價知乎UWP 2.0?
Windows Phone 已停止開發,UWP 的未來會如何?
為何APP開發時都要開發者自己提供多種尺寸的圖標圖片?

TAG:編程 | C# | UWPWindows開發 | 通用Windows平台UWP |