If a StripeObject is being deserialized by psych, @values.has_key? is called before @values is initialized which prevents proper deserialization from occurring. Checking for existence first resolves the issue.