Почему Newtonsoft.Json сериализует byte [] как base64, а sbyte [] нет? - PullRequest
5 голосов
/ 14 марта 2019

byte [] кодируется в base64, sbyte [] нет.

byte[] bs = {100,101};
Newtonsoft.Json.JsonConvert.SerializeObject(bs);//"ZGU="

sbyte[] sbs = {100,101};
Newtonsoft.Json.JsonConvert.SerializeObject(sbs);//"[100,101]"

Ответы [ 2 ]

7 голосов
/ 14 марта 2019

Так работает JSON.Net, и я подозреваю, что большинство сериализаторов делают то же самое. Проверьте документацию , в которой явно указано, что byte[] сериализуется как строка в кодировке base64.

Все остальные массивы обрабатываются так, как вы ожидаете, как простые типы массивов JSON, в которых элементы сериализуются в соответствии с правилами для типа массива. Это означает, что sbyte[] будет сериализован как массив целых чисел.

1 голос
/ 14 марта 2019

Руководство по сериализации в документации для JSON.Net показывает, что для массива sbyte[] не существует правила сериализации.Однако есть запись для sbyte.sbyte будет сериализовано как int.

byte[] массивы будут сериализованы в строку base64, поскольку это явно определено в руководстве, и для удобства.

Поскольку в sbyte[] не существует правила дляРуководство по сериализации массив будет обрабатываться как любой другой массив, и его члены будут сериализованы в соответствии с руководством.Поэтому sbyte[] сериализуется в int[], поскольку sbyte сериализуется в int.

. См. Изображение ниже:

enter image description here

...