Это релевантная часть файла JSON. Я пытаюсь передать значения определенному пользователем сценарию для обработки
{
"FragCount": 63,
"ValueMapping": 7,
"DataType": 19,
"BurstId": 85,
"SensorNodeId": "bd8e8077",
"Values": [
23,
-3,
20,
31,
51,
-3,
-14,
-4,
47,
31,
52,
-3,
2,
-3,
42,
31,
49,
-3,
-18,
-4,
-10,
30,
47,
-3,
-29,
-4,
55,
31,
27,
-3,
-24,
-4,
11,
31,
-32,
-4,
-38,
-4,
-18,
30,
-20,
-4,
-76,
-4,
-42,
30,
-59,
-4,
-81,
-4,
45,
31,
-79,
-4,
-75,
-4,
19,
31,
-93,
-4,
-99,
-4,
-40,
30,
-122,
-4,
-90,
-4,
-70,
30,
-128,
-4,
-92,
-4,
-112,
30,
119,
-4,
-91,
-4,
-46,
30,
120,
-4,
-49,
-4,
-61,
30,
87,
-4,
-43,
-4,
-27,
30,
61,
-4
],
Запрос Stream Analytics выглядит так:
WITH ReaderQuery AS (
SELECT
*
FROM
[IoT-Hub]
)
SELECT
SensorNodeId AS SensorID,
FragCount AS FragCount,
ValueMapping AS ValueMapping,
DataType AS DataType,
BurstId AS BurstId,
udf.FFTDecompressor_Class1_FFTDecomFunc(try_cast([Values] as Array)) AS [Values],
MeasurementId AS MeasurementId
INTO
[FFT]
FROM
ReaderQuery
WHERE ( DataType = 19 )
Это пользовательская функция. Я действительно не могу понять, как мне преобразовать значения в объекте b в целочисленный список или массив для обработки.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace FFTDecompressor
{
public class Class1
{
// Public static function
public static String FFTDecomFunc(Object b)
{
//int[] a = Array.ConvertAll<object, int>(b.ToArray(), (o) => (int)o);
//List<int> a = b.Split(',').Select(s => int.Parse(s)).ToList();
List<int> FFTList = new List<int>();
String DecompressedValues = null;
for (int i = 0; i < a.Count; i++)
{
if (i == 0)
{
FFTList.Add(BitConverter.ToUInt16(new[] { Convert.ToByte(a[i]), Convert.ToByte(a[i +1]), }, 0));
FFTList.ForEach(x => Console.WriteLine(x));
i++;
}
else
{
if (a[i] == -128)
{
FFTList.Add(BitConverter.ToUInt16(new[] { Convert.ToByte(a[i + 1]),
Convert.ToByte(a[i + 2]), }, 0));
i += 2;
}
else
{
if (FFTList.Count == 1)
{
FFTList.Add(FFTList[0] + a[i]);
}
else
{
FFTList.Add(FFTList[(FFTList.Count - 1)] + a[i]);
}
}
}
}
/*
for (int i = 0; i < FFTList.Count; ++i)
{
FFTList[i] /= 100;
}
*/
DecompressedValues = string.Join(",", FFTList);
return DecompressedValues;
}
}
}