The error you are receiving is because Convert.ToInt16 will throw an exception if the argument cannot be parsed into a 16bit integer, so you have to ensure that if you make a call to Convert.ToInt16 the argument you supply it is valid.
In your case the problem in Cache.jobDetails.X.ToString() being empty or null, so string.IsNullOrEmpty(Cache.jobDetails.x.ToString()) is what you need to check.
eg.
objectDetails.x =
string.IsNullOrEmpty(Cache.jobDetails.x.ToString().Trim())
? 0
: Convert.ToInt16(jobDetails.GetValues(Cache.jobDetails.x.ToString().Trim())[0]);