If you want the result to be potentially empty, you should not call Convert.ToDecimal- which always returns decimal. Instead, you should use:
x = obj.sal == null ? (decimal?) null
: Convert.ToDecimal(Encoding.ASCII.GetString(obj.sal));
, null decimal? - - , default(decimal?), decimal? - . . .