C#: Realtime Currency Exchange Class

    January 4, 2007

Soon, I’m facing a new project where the need for up-to-date currency exchanges is crucial.

This is not the first time I’ve done this, but I wanted to make a reusable, self-maintainable class so I don’t have to do it again.

The European Central Bank (ECB) provides the currency exchange rates on a daily basis in XML format, so all there needs to be done, is to wrap the XML file into a generic dictionary for easy use. With that in mind, here are the rules of the Currency class:

  • Use XML file from ECB
  • Update the currencies daily
  • Must still function if the ECB has downtime
  • Must be self maintained
  • Must be plug ‘n play. Only CLR classes can be used.

In order to make the class self maintained it uses a System.Timers.Timer to check the ECB website once an hour for updates. As soon as it finds an update, the XML file is being downloaded and parsed. This is the Download method which runs once an hour.

/// <summary>
/// Downloads the latest exchange rates from ECB.
/// </summary>
private static void Download()
   HttpWebRequest request = WebRequest.Create(_Url) as HttpWebRequest;
   using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    if (response.StatusCode == HttpStatusCode.OK && response.LastModified != _LastModified)
     using (StreamWriter writer = new StreamWriter(_Filename, false))
      StreamReader reader = new StreamReader(response.GetResponseStream());
    _LastModified = response.LastModified;

   _Timer.Interval = _UpdateInterval;
   catch (Exception)
   // If an error occurs, try again in 10 minuttes.
   _Timer.Interval = 1000 * 60 * 10;

Examples of use

double fromUSDtoEUR = Currency.Exchange("USD", "EUR", 12.75);
double rateFromUSDtoNOK = Currency.GetRate("NOK", "USD");

     if (Currency.LastUpdated < DateTime.Now.Date)    Currency.Update();   foreach (string currency in Currency.GetAllRates().Keys) {    Response.Write(string.Format("{0}: {1}<br />", currency, Currency.GetAllRates()[currency])); }


Download the Currency.cs below and add it to the App_Code folder of your website. Then add the following to the section of the web.config.

<add key="Currency.Filename" value="~/currency.xml"/>

The filename value can either be a relative or absolute file path.


Currency.zip (1,93 KB)



Reddit | Furl

Bookmark WebProNews:

Mads Kristensen currently works as a Senior Developer at Traceworks located
in Copenhagen, Denmark. Mads graduated from Copenhagen Technical Academy with a multimedia degree in
2003, but has been a professional developer since 2000. His main focus is on ASP.NET but is responsible for Winforms, Windows- and
web services in his daily work as well. A true .NET developer with great passion for the simple solution.