I finally found the problem. The exception was raising when 'v' is an Int32. I didn't defined an overload for this type because I thought that it would go down to the 'object' overload, but instead of that, the runtime tries to use the 'decimal' and 'double' ones, which caused the exception.
So the solution is simply to add
private static string GetStringValue(Int32 value) { ... }