I haven't tested if faster, but this is an alternative way for dynamic casting. This is alsp more universal, since Convert.ChangeType() has some limitations, as you have seen (Guids, Nullable types)
value = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(str);