Here is some code that I wrote to map values Dictionary to properties on a class.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;

public class Requests<TRequest>
    where TRequest : class
{
    public static TRequest Parse(Dictionary<string, object> request)
    {
        var result = Activator.CreateInstance<TRequest>();
        PropertyInfo[] properties = result.GetType()
            .GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (var key in request.Keys)
        {
            var value = request[key];
            var prop = properties.Where(p => p.Name.Equals(key, StringComparison.CurrentCultureIgnoreCase))
                .FirstOrDefault();

            if (prop != null)
            {
                var newValue = Convert.ChangeType(value, prop.PropertyType);
                prop.SetValue(result, newValue, null);
            }
        }

        return result;
    }
}

I have since realised that the JavaScriptSerializer provides a ConvertToType<T> method that achieves the same thing. As I was already working with Json serialization making the change was trivial.