#c# #serialization #json.net #base64
#c# #сериализация #json.net #base64
Вопрос:
кодировка byte[] в base64,sbyte[] — нет.
byte[] bs = {100,101};
Newtonsoft.Json.JsonConvert.SerializeObject(bs);//"ZGU="
sbyte[] sbs = {100,101};
Newtonsoft.Json.JsonConvert.SerializeObject(sbs);//"[100,101]"
Комментарии:
1. для меня это действительно странно, я воспроизвел локально. поискал в документах, но не нашел быстрого ответа.
2.
byte[]
это стандартный способ представления двоичных данных в объектах — некоторые из них могут быть непечатаемыми символами ASCII. Таким образом, использование символа ascii не является вариантом. Строка кодирования Base64 короче, чем список чисел, разделенных запятой; отсюда и соглашение об использовании Base64. Если вы действительно хотите использоватьbyte
целочисленные значения as tyni, попробуйте объявить их какCollection<byte>
илиList<byte>
.3. Я просто хочу знать, почему sbyte[] не сериализуется как Base64
Ответ №1:
Это просто способ JSON.Сеть работает, и я подозреваю, что большинство сериализаторов делают то же самое. Проверьте документацию, в которой явно сказано, что byte[]
это сериализуется как строка в кодировке base64.
Все остальные массивы обрабатываются так, как и следовало ожидать, как простые типы массивов JSON, где элементы сериализуются в соответствии с правилами для типа массива. Это означает, что sbyte[]
это будет сериализовано как массив целых чисел.
Комментарии:
1. Как Google-gson десериализует строку json, закодированную в base64?
Ответ №2:
Руководство по сериализации в документации для JSON.Сеть показывает, что для sbyte[]
массива не существует правила сериализации. Однако существует запись для sbyte
. sbyte
будет сериализован как int
.
byte[]
массивы будут сериализованы в base64
строку, поскольку это явно определено в руководстве, и для удобства.
Поскольку в руководстве по сериализации нет правила для sbyte[]
, массив будет обрабатываться как любой другой массив, и его элементы будут сериализованы в соответствии с руководством. Следовательно, sbyte[]
сериализуется в int[]
, поскольку sbyte
сериализуется в int
.
Пожалуйста, смотрите изображение ниже: