public Subscription(NodeWrapper node, IBraintreeGateway gateway) { Balance = node.GetDecimal("balance"); BillingDayOfMonth = node.GetInteger("billing-day-of-month"); BillingPeriodEndDate = node.GetDateTime("billing-period-end-date"); BillingPeriodStartDate = node.GetDateTime("billing-period-start-date"); CurrentBillingCycle = node.GetInteger("current-billing-cycle"); DaysPastDue = node.GetInteger("days-past-due"); Descriptor = new Descriptor(node.GetNode("descriptor")); FailureCount = node.GetInteger("failure-count"); FirstBillingDate = node.GetDateTime("first-billing-date"); CreatedAt = node.GetDateTime("created-at"); UpdatedAt = node.GetDateTime("updated-at"); Id = node.GetString("id"); NextBillAmount = node.GetDecimal("next-bill-amount"); NextBillingDate = node.GetDateTime("next-billing-date"); NextBillingPeriodAmount = node.GetDecimal("next-billing-period-amount"); NeverExpires = node.GetBoolean("never-expires"); NumberOfBillingCycles = node.GetInteger("number-of-billing-cycles"); PaymentMethodToken = node.GetString("payment-method-token"); PaidThroughDate = node.GetDateTime("paid-through-date"); PlanId = node.GetString("plan-id"); Price = node.GetDecimal("price"); Status = (SubscriptionStatus)CollectionUtil.Find(SubscriptionStatus.STATUSES, node.GetString("status"), SubscriptionStatus.UNRECOGNIZED); List<NodeWrapper> statusNodes = node.GetList("status-history/status-event"); StatusHistory = new SubscriptionStatusEvent[statusNodes.Count]; for (int i = 0; i < statusNodes.Count; i++) { StatusHistory[i] = new SubscriptionStatusEvent(statusNodes[i]); } HasTrialPeriod = node.GetBoolean("trial-period"); TrialDuration = node.GetInteger("trial-duration"); var trialDurationUnitStr = node.GetString("trial-duration-unit"); if (trialDurationUnitStr != null) { TrialDurationUnit = (SubscriptionDurationUnit)CollectionUtil.Find(SubscriptionDurationUnit.ALL, trialDurationUnitStr, SubscriptionDurationUnit.UNRECOGNIZED); } MerchantAccountId = node.GetString("merchant-account-id"); AddOns = new List<AddOn> (); foreach (var addOnResponse in node.GetList("add-ons/add-on")) { AddOns.Add(new AddOn(addOnResponse)); } Discounts = new List<Discount> (); foreach (var discountResponse in node.GetList("discounts/discount")) { Discounts.Add(new Discount(discountResponse)); } Transactions = new List<Transaction> (); foreach (var transactionResponse in node.GetList("transactions/transaction")) { Transactions.Add(new Transaction(transactionResponse, gateway)); } }