/// <summary>
            /// Read the JSON object and convert to the object.  This will allow the serializer to
            /// automatically convert the object.  No special instructions need to be done and all
            /// the properties found in the JSON string need to be used.
            ///
            /// DataSet.BottomTrackEngineeringDataSet decodedEns = Newtonsoft.Json.JsonConvert.DeserializeObject{DataSet.BottomTrackEngineeringDataSet}(encodedEns)
            ///
            /// </summary>
            /// <param name="reader">NOT USED. JSON reader.</param>
            /// <param name="objectType">NOT USED> Type of object.</param>
            /// <param name="existingValue">NOT USED.</param>
            /// <param name="serializer">Serialize the object.</param>
            /// <returns>Serialized object.</returns>
            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
            {
                if (reader.TokenType != JsonToken.Null)
                {
                    // Load the object
                    JObject jsonObject = JObject.Load(reader);

                    // Decode the data
                    int NumElements        = (int)jsonObject[DataSet.BaseDataSet.JSON_STR_NUMELEMENTS];
                    int ElementsMultiplier = (int)jsonObject[DataSet.BaseDataSet.JSON_STR_ELEMENTSMULTIPLIER];

                    // Create the object
                    var data = new BottomTrackEngineeringDataSet(DataSet.Ensemble.DATATYPE_FLOAT, NumElements, ElementsMultiplier, DataSet.Ensemble.DEFAULT_IMAG, DataSet.Ensemble.DEFAULT_NAME_LENGTH, DataSet.Ensemble.BottomTrackEngineeringID);

                    // SamplesPerSecond
                    data.SamplesPerSecond = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_SAMPLESPERSECOND];

                    // SystemFreqHz
                    data.SystemFreqHz = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_SYSTEMFREQHZ];

                    // LagSamples
                    data.LagSamples = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_LAGSAMPLES];

                    // CPCE
                    data.CPCE = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_CPCE];

                    // NCE
                    data.NCE = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_NCE];

                    // RepeatN
                    data.RepeatN = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_REPEATN];

                    // AmbHz
                    JArray jArray = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBHZ];
                    data.AmbHz = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbHz[x] = (float)jArray[x];
                    }

                    // AmbVel
                    jArray      = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBVEL];
                    data.AmbVel = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbVel[x] = (float)jArray[x];
                    }

                    // AmbAmp
                    jArray      = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBAMP];
                    data.AmbAmp = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbAmp[x] = (float)jArray[x];
                    }

                    // AmbCor
                    jArray      = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBCOR];
                    data.AmbCor = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbCor[x] = (float)jArray[x];
                    }

                    // AmbSNR
                    jArray      = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBSNR];
                    data.AmbSNR = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbSNR[x] = (float)jArray[x];
                    }

                    // LagUsed
                    jArray       = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_LAGUSED];
                    data.LagUsed = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.LagUsed[x] = (float)jArray[x];
                    }

                    return(data);
                }

                return(null);
            }
            /// <summary>
            /// Read the JSON object and convert to the object.  This will allow the serializer to
            /// automatically convert the object.  No special instructions need to be done and all
            /// the properties found in the JSON string need to be used.
            /// 
            /// DataSet.BottomTrackEngineeringDataSet decodedEns = Newtonsoft.Json.JsonConvert.DeserializeObject{DataSet.BottomTrackEngineeringDataSet}(encodedEns)
            /// 
            /// </summary>
            /// <param name="reader">NOT USED. JSON reader.</param>
            /// <param name="objectType">NOT USED> Type of object.</param>
            /// <param name="existingValue">NOT USED.</param>
            /// <param name="serializer">Serialize the object.</param>
            /// <returns>Serialized object.</returns>
            public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
            {
                if (reader.TokenType != JsonToken.Null)
                {
                    // Load the object
                    JObject jsonObject = JObject.Load(reader);

                    // Decode the data
                    int NumElements = (int)jsonObject[DataSet.BaseDataSet.JSON_STR_NUMELEMENTS];
                    int ElementsMultiplier = (int)jsonObject[DataSet.BaseDataSet.JSON_STR_ELEMENTSMULTIPLIER];

                    // Create the object
                    var data = new BottomTrackEngineeringDataSet(DataSet.Ensemble.DATATYPE_FLOAT, NumElements, ElementsMultiplier, DataSet.Ensemble.DEFAULT_IMAG, DataSet.Ensemble.DEFAULT_NAME_LENGTH, DataSet.Ensemble.BottomTrackEngineeringID);

                    // SamplesPerSecond
                    data.SamplesPerSecond = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_SAMPLESPERSECOND];

                    // SystemFreqHz
                    data.SystemFreqHz = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_SYSTEMFREQHZ];

                    // LagSamples
                    data.LagSamples = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_LAGSAMPLES];

                    // CPCE
                    data.CPCE = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_CPCE];

                    // NCE
                    data.NCE = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_NCE];

                    // RepeatN
                    data.RepeatN = (float)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_REPEATN];

                    // AmbHz
                    JArray jArray = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBHZ];
                    data.AmbHz = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbHz[x] = (float)jArray[x];
                    }

                    // AmbVel
                    jArray = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBVEL];
                    data.AmbVel = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbVel[x] = (float)jArray[x];
                    }

                    // AmbAmp
                    jArray = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBAMP];
                    data.AmbAmp = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbAmp[x] = (float)jArray[x];
                    }

                    // AmbCor
                    jArray = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBCOR];
                    data.AmbCor = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbCor[x] = (float)jArray[x];
                    }

                    // AmbSNR
                    jArray = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_AMBSNR];
                    data.AmbSNR = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.AmbSNR[x] = (float)jArray[x];
                    }

                    // LagUsed
                    jArray = (JArray)jsonObject[DataSet.BaseDataSet.JSON_STR_BTE_LAGUSED];
                    data.LagUsed = new float[jArray.Count];
                    for (int x = 0; x < jArray.Count; x++)
                    {
                        // Add all the values to the array
                        data.LagUsed[x] = (float)jArray[x];
                    }

                    return data;
                }

                return null;
            }