В широком смысле, вам доступно несколько вариантов.
Прежде всего, вы можете рассмотреть возможность использования application/octet-stream
в качестве типа ответа вместо application/json
в ответе HTTP. application/octet-stream
означает, что байты отправляются напрямую по HTTP. Так вы обычно загружаете / скачиваете файлы.
Во-вторых, можно кодировать двоичные данные в текст более безопасным способом, например, используя алгоритмы кодирования, такие как Base64 , которые вы можете достигните дюйма NET, используя Convert.ToBase64String метод. Такие методы более многословны, чем использование octet-stream
, но они также лучше работают при попытке отправки структурированных данных с некоторым двоичным содержимым.
И, наконец, как вы просили, вы можете использовать структуру для непосредственного представления данных. Есть несколько опций, вы можете напрямую кодировать массив чисел, что даст вам JSON полезную нагрузку в виде:
[220, 230, 240, 22, 23, 24, 26]
Чтобы достичь этого, вы просто сериализуете список чисел, например, byte[]
напрямую или, возможно, int[]
в зависимости от поведения вашего сериализатора (. NET Core 3.0+ System.Test. Json .JsonSerializer преобразует байтовые массивы в base64, поэтому необходимо преобразование в int[]
). Живой образец .
Запрошенная вами структура не представляется возможной непосредственно в JSON, но вы можете добиться чего-то подобного сериализации Dictionary<string, string>
, получая структуру { "0": "220", "1": "230", "2":"240" ... }
. Однако обратите внимание, что эта структура довольно многословна и не очень практична.
Вы можете получить словарь, используя следующий фрагмент:
var bytes = new byte[] { 220, 230, 240, 22, 23, 24, 26 };
var dictionary = bytes
.Select((b, i) => (value: b, index: i)) // convert bytes to sequence of (byte value, index)
.ToDictionary(x => x.index.ToString(), x => x.value.ToString());