JsonConvert.DeserializeObject 问题
JsonConvert.DeserializeObject issue
在我的 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();
当我在我的 phone 上部署它时,它挂在加载屏幕上并且应用程序无法启动。这里有什么问题?
你这里有死循环。您正在创建新的 BitcoinAPI 对象并在其构造函数中调用 Unirest.get()
方法。然后 JsonConvert.DeserializeObject()
方法正在创建另一个 BitcoinAPI 对象,因此构造函数被一次又一次地调用......所以它永远不会结束。
我的解决方案是在 BitcoinAPI class 中创建静态方法并保留空构造函数:
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()
。
在我的 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();
当我在我的 phone 上部署它时,它挂在加载屏幕上并且应用程序无法启动。这里有什么问题?
你这里有死循环。您正在创建新的 BitcoinAPI 对象并在其构造函数中调用 Unirest.get()
方法。然后 JsonConvert.DeserializeObject()
方法正在创建另一个 BitcoinAPI 对象,因此构造函数被一次又一次地调用......所以它永远不会结束。
我的解决方案是在 BitcoinAPI class 中创建静态方法并保留空构造函数:
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()
。