在我的Windows Phone C#项目中,我使用unirest检索信息并尝试反序列化。这就是我所拥有的:
public float btc_to_usd { get; set; }
public BitcoinAPI()
{
HttpResponse<string> response =
Unirest.get("https://montanaflynn-bitcoin-exchange-rate.p.mashape.com/currencies/exchange_rates")
.header("X-Mashape-Key", "<my key here>")
.header("Accept", "text/plain")
.asString();
string json = response.Body;
BitcoinAPI info = JsonConvert.DeserializeObject<BitcoinAPI>(json);
}
然后在MainPage.xaml.cs中:
BitcoinAPI api = new BitcoinAPI();
TxtCAmount.Text = api.btc_to_usd.ToString();
当我在手机上部署它时,它会挂在加载屏幕上并且应用程序无法启动。这里的问题是什么?
答案 0 :(得分:0)
你这里有无尽的循环。您正在创建新的BitcoinAPI对象并在其构造函数中调用Unirest.get()
方法。然后JsonConvert.DeserializeObject()
方法正在创建另一个BitcoinAPI对象,所以一次又一次地调用构造函数......所以它永远不会结束。
我的解决方案是在BitcoinAPI类中创建静态方法并留下空构造函数:
public class BitcoinAPI
{
public BitcoinAPI()
{
}
public static BitcoinAPI FromHttp()
{
HttpResponse<string> response =
Unirest.get("https://montanaflynn-bitcoin-exchange-rate.p.mashape.com/currencies/exchange_rates")
.header("X-Mashape-Key", "<my key here>")
.header("Accept", "text/plain")
.asString();
string json = response.Body;
BitcoinAPI info = JsonConvert.DeserializeObject<BitcoinAPI>(json);
return info;
}
}
现在,如果您想要从JSON反序列化新的BitcoinAPI对象,只需拨打BitcoinAPI.FromHttp()
而不是new BitcoinAPI()
。