void IUtf8JsonSerializable.Write(Utf8JsonWriter writer)
 {
     writer.WriteStartObject();
     writer.WritePropertyName("periodType");
     writer.WriteStringValue(PeriodType.ToString());
     writer.WritePropertyName("periodValue");
     writer.WriteNumberValue(PeriodValue);
     writer.WriteEndObject();
 }
        internal static PeriodFeedbackValue DeserializePeriodFeedbackValue(JsonElement element)
        {
            PeriodType periodType  = default;
            int        periodValue = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("periodType"))
                {
                    periodType = new PeriodType(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("periodValue"))
                {
                    periodValue = property.Value.GetInt32();
                    continue;
                }
            }
            return(new PeriodFeedbackValue(periodType, periodValue));
        }
        /// <summary> Initializes a new <see cref="MetricPeriodFeedback"/> instance. </summary>
        /// <param name="metricId"> The metric unique id. </param>
        /// <param name="dimensionFilter"> The <see cref="FeedbackDimensionFilter"/> to apply to the feedback. </param>
        /// <param name="periodType"> The <see cref="Models.PeriodType"/>. </param>
        /// <param name="periodValue"> The period value. </param>
        /// <exception cref="ArgumentNullException"> <paramref name="metricId"/> or <paramref name="dimensionFilter"/> is null. </exception>
        /// <exception cref="ArgumentException"> <paramref name="metricId"/> is empty. </exception>
        public MetricPeriodFeedback(string metricId, FeedbackDimensionFilter dimensionFilter, PeriodType periodType, int periodValue) : base(metricId, dimensionFilter)
        {
            Argument.AssertNotNullOrEmpty(metricId, nameof(metricId));
            Argument.AssertNotNull(dimensionFilter, nameof(dimensionFilter));

            ValueInternal = new PeriodFeedbackValue(periodType, periodValue);
            Type          = FeedbackType.Period;
        }