我正在尝试在我的网站中使用货币转换网络服务。我添加了对.asmx文件的引用。
这是我的代码:
net.webservicex.www.CurrencyConvertor Convertor; //creating instance of web service
float new_donation = donation * Convertor.ConversionRate("EUR", "GBP"); //converting donation to new value
问题是我发布的第二行给出了以下错误:
'abc.net.webservicex.www.CurrencyConvertor.ConversionRate(abc.net.webservicex.www.Currency,abc.net.webservicex.www.Currency)'的最佳重载方法匹配有一些无效的参数
参数1:无法从'string'转换为'abc.net.webservicex.www.Currency'
参数2:无法从'string'转换为'abc.net.webservicex.www.Currency'
以下是网络服务说明的链接:
http://www.webservicex.net/ws/wsdetails.aspx?wsid=10
我该如何解决这个问题?提前谢谢。
答案 0 :(得分:5)
它告诉你清楚的是......当你期待2 ConversionRate(...)
s时,你将2个字符串传递给Currency
方法。
这似乎就好像它可能不是您可以控制的WebService,而只是消费者......
首先,处理此WebService的最简单方法是使用项目中的“添加服务引用...”(WSDL地址:http://www.webservicex.net/CurrencyConvertor.asmx?WSDL)...
但是,如果你想手动完成,那么创建一个枚举来使用并传入一个枚举值...
public enum Currency
{
AFA,
ALL,
...
}
Convertor.ConversionRate(Currency.EUR, Currency.GBP);
答案 1 :(得分:3)
而不是使用字符串"EUR"
使用Convertor.Currency.EUR
。
答案 2 :(得分:2)
我对C#和WPF很陌生,所以我和你一样经历了同样的阶段。 让我尝试一步一步地让它发挥作用。
正如其他一些帖子所说,首先你需要添加网络参考。您可以通过转到解决方案资源管理器,右键单击“服务引用”,然后单击“添加服务引用”来完成此操作。在新窗口中,单击底部的“高级”,然后在下一个窗口中单击底部的“添加Web引用”。然后输入URL:
“http://www.webservicex.net/CurrencyConvertor.asmx?WSDL”
通常现在它应该寻找与此URL相关的可用服务,并找到一个:“CurrencyConverter”。给它一个引用名称,如“net.webservicex.www”,然后单击“添加引用”。现在,您可以在代码中使用它。
现在我们来看看代码吧。例如,如果您想显示欧元/美元汇率,只需输入以下代码:
net.webservicex.www.CurrencyConvertor conver = new net.webservicex.www.CurrencyConvertor();
MessageBox.Show((conver.ConversionRate(net.webservicex.www.Currency.EUR, net.webservicex.www.Currency.USD)).ToString());
conver.dispose();
希望这有帮助!
答案 3 :(得分:1)
我写了一段时间后,我调用当前货币并将它们作为json对象存储在类中。这样,您可以更快地在平台上进行多种货币的计算。 getCurrencies - >返回字符串[]“EUR”,“USD”等 计算 - > (“美元”,“欧元”,1.0)将1美元兑换成欧元
class CurrencyConvertor
{
public string[] currencyList;
RestClient client = new RestClient ("http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json");
RestRequest request = new RestRequest ("",Method.GET);
JObject json;
public CurrencyConvertor()
{
var response = client.Execute(request);
json = JObject.Parse (response.Content);
}
public string[] getCurrencies()
{
ArrayList currencies = new ArrayList ();
foreach (var item in json["list"]["resources"]) {
string tempN = item ["resource"] ["fields"] ["name"].ToString ().Replace ("USD/", "");
if(tempN.Length < 4)
currencies.Add (tempN);
}
currencies.Sort ();
currencyList = (string[])currencies.ToArray(typeof(string));
return currencyList;
}
public string calculate(string Base, string Target, decimal amount)
{
decimal temp1 = 1;
decimal temp2 = 1;
Console.WriteLine (Base + "to"+Target);
foreach (var item in json["list"]["resources"]) {
if (item["resource"]["fields"]["name"].ToString().Contains("/"+Base)) {
temp1 = decimal.Parse(amount.ToString()) * decimal.Parse(item ["resource"] ["fields"] ["price"].ToString(), CultureInfo.InvariantCulture.NumberFormat);
}
if (item ["resource"] ["fields"] ["name"].ToString().Contains("/"+Target)) {
temp2=decimal.Parse(amount.ToString()) * decimal.Parse(item ["resource"] ["fields"] ["price"].ToString(), CultureInfo.InvariantCulture.NumberFormat);
}
}
var dec = ((decimal)temp2 / (decimal)temp1);
return (Math.Round(dec*amount,5) ).ToString().Replace(",",".");
}
}