示例#1
0
        /// <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);
 }