我正在使用免费账户的货币转换API:https://currencylayer.com/documentation。我让用户输入输出货币,例如如果用户输入SGD,则会显示USD转换为SGD的货币转换率:"USDSGD":1.318504。
抓取该值的方法是使用动态反序列化器,将其放入标签中,如下所示:
这是我的代码 - 强类型版本确实产生了预期的结果,但我想从文本框中读取货币的名称(实际上是
目前我的代码
返回值:
我希望代码执行
lblResult.Text=test.quotes.USDSGD.ToString();
但我想要的是不考虑用户选择的货币,获取结果。另一个货币总是美元,因此我想将其与用户输入的货币组合起来,从API获取正确的价值,如:
var propertyName = "USD" + destinationCurrencyName; // "USDSGD"
lblResult.Text=test.quotes.{propertyName}; // what I'd like
我需要访问“USDSGD”属性。
我知道可以使用反射(在C#中使用反射从字符串获取属性值),但那似乎有些复杂。
这是查询返回的内容:
{
"success":true,
"terms":"https:\/\/currencylayer.com\/terms",
"privacy":"https:\/\/currencylayer.com\/privacy",
"timestamp":1517629571,
"source":"USD",
"quotes":{
"USDSGD":1.318504
}
}
这是我的代码 - 强类型版本确实产生了预期的结果,但我想从文本框中读取货币的名称(实际上是
quotes
元素的属性名称):protected void btnConvert_Click(object sender, EventArgs e)
{
string convertTo = TextBox1.Text.ToString();
var webRequest = (HttpWebRequest)WebRequest.Create("http://apilayer.net/api/live?access_key=MY_ACCESS_KEY¤cies=" + Server.UrlEncode(convertTo) + "&source=USD&format=1");
var webResponse = (HttpWebResponse)webRequest.GetResponse();
if (webResponse.StatusCode == HttpStatusCode.OK)
{
JavaScriptSerializer json = new JavaScriptSerializer();
StreamReader sr = new StreamReader(webResponse.GetResponseStream());
var resString = sr.ReadToEnd();
//var test = JsonConvert.DeserializeObject<Result>(resString);
//lblResult.Text=test.quotes.USDSGD.ToString();
var test2 = JsonConvert.DeserializeObject<dynamic>(resString);
lblResult.Text = test2.quotes.USD+convertTo;
}
}
目前我的代码
var test2 = JsonConvert.DeserializeObject<dynamic>(resString);
lblResult.Text = test2.quotes.USD+convertTo;
返回值:
由于"convertTo"变量的值为"SGD",因此返回了"SGD"。SGD
我希望代码执行
lblResult.Text = test2.quotes.USD+convertTo;
,而不是返回"convertTo"变量。请注意保留HTML标签。
USDSGD.ToString()
,那么为什么现在不继续使用呢? - Sami KuhmonenUSD
属性,所以当然会得到空值和convertTo
作为输出。 - Sami Kuhmonen