JsonConvert.DeserializeObject问题

时间:2015-02-10 16:13:20

标签: c# visual-studio-2013 windows-phone

在我的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();

当我在手机上部署它时,它会挂在加载屏幕上并且应用程序无法启动。这里的问题是什么?

1 个答案:

答案 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()