private static JsonValue AnalogWaveformHelper <T>(ITimedWaveform waveform)
        {
            JsonObject value = new JsonObject();

            if (waveform is ComplexWaveform <T> complexData)
            {
                value[NITypeFactory.WaveformYFieldName] = SerializeArray(complexData.GetRawData());
            }
            else if (waveform is AnalogWaveform <T> analogData)
            {
                value[NITypeFactory.WaveformYFieldName] = SerializeArray(analogData.GetRawData());
            }
            if (waveform.PrecisionTiming != null)
            {
                value[NITypeFactory.WaveformT0FieldName] = SerializePrecisionDateTime(waveform.PrecisionTiming.StartTime);
                value[NITypeFactory.WaveformDTFieldName] = SerializeDouble(waveform.PrecisionTiming.SampleInterval.TotalSeconds);
            }

            if (!string.IsNullOrEmpty(waveform.ChannelName))
            {
                value["channelName"] = SerializeString(waveform.ChannelName);
            }

            return(value);
        }
        /// <summary>
        /// Serializes the C# model representation of an AnalogWaveform
        /// </summary>
        /// <param name="waveform">The waveform value to serialize</param>
        /// <returns>The corresponding JavaScript representation. Will be a <see cref="JsonObject"/> with a field for each waveform field.</returns>
        public static JsonValue SerializeWaveform(ITimedWaveform waveform)
        {
            JsonValue result = null;

            if (waveform is AnalogWaveform <double> )
            {
                result = AnalogWaveformHelper <double>(waveform);
            }
            else if (waveform is AnalogWaveform <float> )
            {
                result = AnalogWaveformHelper <float>(waveform);
            }
            else if (waveform is AnalogWaveform <sbyte> )
            {
                result = AnalogWaveformHelper <sbyte>(waveform);
            }
            else if (waveform is AnalogWaveform <byte> )
            {
                result = AnalogWaveformHelper <byte>(waveform);
            }
            else if (waveform is AnalogWaveform <ushort> )
            {
                result = AnalogWaveformHelper <ushort>(waveform);
            }
            else if (waveform is AnalogWaveform <short> )
            {
                result = AnalogWaveformHelper <short>(waveform);
            }
            else if (waveform is AnalogWaveform <uint> )
            {
                result = AnalogWaveformHelper <uint>(waveform);
            }
            else if (waveform is AnalogWaveform <int> )
            {
                result = AnalogWaveformHelper <int>(waveform);
            }
            else if (waveform is ComplexWaveform <ComplexSingle> )
            {
                result = AnalogWaveformHelper <ComplexSingle>(waveform);
            }
            else if (waveform is ComplexWaveform <ComplexDouble> )
            {
                result = AnalogWaveformHelper <ComplexDouble>(waveform);
            }
            else
            {
                throw new ArgumentException($"Can't serialize this kind of analog waveform: {waveform.GetType()}", nameof(waveform));
            }

            return(result);
        }