/// <inheritdoc />
        /// <summary>
        /// Reads the json.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="existingValue">The existing value.</param>
        /// <param name="serializer">The serializer.</param>
        /// <returns></returns>
        /// <exception cref="T:System.ArgumentException"></exception>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            RefundDetailsRequest target;
            var token = JToken.Load(reader);

            switch (Enum.Parse(typeof(PaymentMethod), token["payment_method"].Value <string>()))
            {
            case PaymentMethod.AfterPay:
                target = new AfterPayRefundDetailsRequest();
                break;

            case PaymentMethod.DirectDebit:
                target = new DirectDebitRefundDetailsRequest();
                break;

            case PaymentMethod.iDEAL:
                target = new IdealRefundDetailsRequest();
                break;

            default:
                throw new ArgumentException();
            }

            serializer.Populate(token.CreateReader(), target);
            return(target);
        }
        public void AfterPayRefundDetailsRequest()
        {
            var obj = new AfterPayRefundDetailsRequest
            {
                CreditInvoiceNumber = "Lorum_605"
            };
            var deserialized = ConversionTest(obj);

            Assert.IsNotNull(deserialized);
            Assert.AreEqual(obj.CreditInvoiceNumber, deserialized.CreditInvoiceNumber);
            Assert.AreEqual(obj.Method, deserialized.Method);
        }