Как сериализовать определенные типы массивов с помощью SDK устройства IoT для Azure для C Serializer - PullRequest
0 голосов
/ 27 июня 2019

Сериализатор 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, но их нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...