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))

            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.