Well, Rex informed me of the handy MethodInfo.MakeGenericMethod which creates a constructed generic method, allowing us to avoid having to declare the generic types at design time. So, now we can bolt on a Deserialize method (note, we cache the constructed generic methods) (formatted to appease wordpress)
public static class JavaScriptSerializerExtensions { private static object _lock = new object(); private static IDictionary<Type, MethodInfo> _deserializers = new Dictionary<Type, MethodInfo>(); private static MethodInfo GetDeserializeMethod(Type type) { lock (_lock) { if (_deserializers.ContainsKey(type)==false) { var mi = typeof(JavaScriptSerializer) .GetMethod("Deserialize"); _deserializers[type] = mi.MakeGenericMethod(type); } } return _deserializers[type]; } public static object Deserialize( this JavaScriptSerializer serializer, Type type, string json) { return GetDeserializeMethod(type).Invoke( serializer, new object[] { json }); } }