Сериализатор SDK устройства IoT устройства Azure для C поддерживает определенные типы данных (https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-device-sdk-c-serializer). По-видимому, массивы нельзя рассматривать.
Массивы можно рассматривать только как тип EDM_BINARY
. Однако, если массив содержит указатели на структуру, объявленную с помощью DECLARE_STRUCT(...)
, строка JSON, сгенерированная макросом / функцией SERIALIZE(destination, destinationSize,...)
(см. https://github.com/Azure/azure-iot-sdk-c/blob/master/serializer/inc/serializer.h), не содержит разыменованное содержимое структур, а только их указатели .
Предоставляет ли SDK устройства IoT устройства Azure для C функциональность для преобразования массивов, содержащих структуры с хотя бы одним элементом ascii_char_ptr
, в строку JSON? Если нет, есть ли рекомендации, как это реализовать?
DECLARE_STRUCT(myStruct,
ascii_char_ptr, name,
int32_t, time
);
DECLARE_STRUCT(myContainer,
ascii_char_ptr, foo,
EDM_BINARY, arrayOfStructs
);
DECLARE_MODEL(SerializableIotSampleDev_t,
WITH_DATA(myContainer, container)
);
myStruct array[2] = {0};
array[0].name = "name0";
array[0].time = 23;
array[1].name = "name1";
array[1].time = 24;
EDM_BINARY binaryArray = {sizeof(array), (unsigned char*)&array};
mdl->container.arrayOfStructs = binaryArray;
SERIALIZE(&destination, &destinationSize, mdl->container)
Я хотел бы иметь "name0" / "name1" в сериализованной строке json, но их нет.