/// <summary>
        ///     Serializes the metric to JSON.
        /// </summary>
        /// <param name="writer">The JSON Writer.</param>
        /// <param name="recording">The metric recording.</param>
        /// <remarks>
        ///     Implementation note, for performance and correctness:
        ///     1. Don't emit null fields at all if the value isn't populated.
        ///     No need for that space in the content on the wire.
        ///     2. Design this method to be repeatable for multiple metrics in case
        ///     we want to batch.
        /// </remarks>
        private static void MetricToJson(JsonTextWriter writer, ref PcfMetricRecording recording)
        {
            writer.WriteStartObject();
            writer.WritePropertyName(MetricName);
            writer.WriteValue(recording.Name);
            writer.WritePropertyName(MetricType);
            writer.WriteValue(recording.Type);
            writer.WritePropertyName(MetricValue);
            writer.WriteValue(recording.Value);
            writer.WritePropertyName(Timestamp);
            writer.WriteValue(recording.Timestamp);

            if (!string.IsNullOrEmpty(recording.Unit))
            {
                writer.WritePropertyName(MetricUnit);
                writer.WriteValue(recording.Unit);
            }


            writer.WritePropertyName(Tags);
            writer.WriteStartObject();
            if (recording.Tags != null)
            {
                foreach (var t in recording.Tags)
                {
                    writer.WritePropertyName(t.Key);
                    writer.WriteValue(t.Value);
                }
            }
            writer.WriteEndObject();

            writer.WriteEndObject();
        }
 public void Serialize(Stream stream, PcfMetricRecording metric, PcfMetricForwarderSettings settings)
 {
     using (var writer = new JsonTextWriter(new StreamWriter(stream, Encoding.Default, 2048, true)))
     {
         WriteHeaders(writer, settings);
         MetricToJson(writer, ref metric);
         CloseHeaders(writer);
     }
 }
        public void ShouldSerializeMetricIntoJson()
        {
            var serializer = new JsonMetricSerializer();
            var recording  = new PcfMetricRecording("hi", 0, "foos", Settings.TimeProvider.NowUnixEpoch, null);
            var stream     = new MemoryStream();

            serializer.Serialize(stream, recording, Settings);
            var actualOutput = stream.ToArray();
            var jsonStr      = Encoding.UTF8.GetString(actualOutput);

            stream.Flush();
            stream.Dispose();
        }