/// <summary> /// Reads the JSON representation of the object. /// </summary> /// <param name="reader">The <see cref="JsonReader" /> to read from.</param> /// <param name="objectType">Type of the object.</param> /// <param name="existingValue">The existing value of object being read.</param> /// <param name="serializer">The calling serializer.</param> /// <returns>The object value.</returns> /// <exception cref="ArgumentNullException"> /// reader /// or /// objectType /// </exception> /// <exception cref="JsonSerializationException"> /// </exception> public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { BillingProvider billingProvider; JObject json; string billingProviderValue; string invoiceLineItemType; InvoiceLineItem lineItem = null; json = JObject.Load(reader); billingProviderValue = json["billingProvider"].ToString(); billingProvider = JsonConvert.DeserializeObject <BillingProvider>($"'{billingProviderValue}'"); invoiceLineItemType = json["invoiceLineItemType"].ToString(); if (!invoiceLineItemType.Equals("usage_line_items", StringComparison.InvariantCultureIgnoreCase)) { if (invoiceLineItemType.Equals("billing_line_items", StringComparison.InvariantCultureIgnoreCase)) { if (billingProvider == BillingProvider.Azure) { lineItem = new UsageBasedLineItem(); } else if (billingProvider == BillingProvider.Office) { lineItem = new LicenseBasedLineItem(); } else if (billingProvider == BillingProvider.OneTime) { lineItem = new OneTimeInvoiceLineItem(); } else if (billingProvider == BillingProvider.All) { lineItem = new OneTimeInvoiceLineItem(); } } } else { if (billingProvider == BillingProvider.Azure) { lineItem = new DailyUsageLineItem(); } else if (billingProvider == BillingProvider.Marketplace) { lineItem = new DailyRatedUsageLineItem(); } } if (lineItem == null) { throw new JsonSerializationException($"InvoiceLineItemConverter cannot deserialize invoice line items with type: '{invoiceLineItemType}' && billing provider: '{billingProviderValue}'"); } serializer.Populate(json.CreateReader(), lineItem); return(lineItem); }
/// <summary> /// Initializes a new instance of the <see cref="PSOneTimeInvoiceLineItem" /> class. /// </summary> /// <param name="lineItem">The base line item for this instance.</param> public PSOneTimeInvoiceLineItem(OneTimeInvoiceLineItem lineItem) { this.CopyFrom(lineItem); }