преобразовать массив байтов в строку, но не с помощью Convert.ToBase64 - PullRequest
0 голосов
/ 08 мая 2018

Уважаемые

У меня есть байтовый массив, который возвращается с веб-сервера, он является частью json-сериализованного объекта (значение свойства). Как показано ниже в строке json:

,"n":"y1GpP7FibyTYl40Jhx1B90WOi1mecJfpi4IEhbHPbAB64jhV16UlpEPyGpNIzDS4Lct80sIs7FW5Vnf38Z-tzPbtHyFVYYU2AC4SVrwQp9-ELz-..._xW3bmMxuwoBgHpWDTw"

Обратите внимание, что в конце нет двойного знака равенства, как для строк Base64.Я использовал три точки (...), чтобы сделать строковое представление немного короче
Я могу десериализовать объект и получить правильный байтовый массив:

var kb = JsonConvert.DeserializeObject<KeyBundle>(Properties.Resources.keyBundleJson);

И могу ли он сериализоваться обратно в json:

JsonSerializerSettings settings = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.None,
    Formatting = Formatting.Indented
};

string json = JsonConvert.SerializeObject(kb, settings);

Но проблема в том, что значение свойства результата не совпадает с исходной строкой:

from web server it was:
y1GpP7FibyTYl40Jhx1B90WOi1mecJfpi4IEhbHPbAB64jhV16UlpEPyGpNIzDS4Lct80sIs7FW5Vnf38Z-tzPbtHyFVYYU2AC4SVrwQp9-ELz-..._xW3bmMxuwoBgHpWDTw

serialized locally:
y1GpP7FibyTYl40Jhx1B90WOi1mecJfpi4IEhbHPbAB64jhV16UlpEPyGpNIzDS4Lct80sIs7FW5Vnf38Z+tzPbtHyFVYYU2AC4SVrwQp9+ELz+.../xW3bmMxuwoBgHpWDTw==

подчеркивания и косые черты, знаки плюс и минус, два знака равенства в конце

возможно ли сериализовать байтовый массив точно так, как это делает веб-сервер?У меня есть идея сериализовать его с Json, а затем заменить минус на плюс, подчеркнуть подчеркивание косой чертой и удалить два последних знака равенства.

Любой другой способ получить его сразу из коробки?

Привет

1 Ответ

0 голосов
/ 08 мая 2018

В URL есть другой вариант Base64, используемый с - и _, который не требует дополнительного кодирования (например, + будет закодировано в %2B). Для этого вы можете просто использовать метод string Replace для замены этих символов.

Если вам нужно готовое решение, вы можете попробовать Microsoft.IdentityModel.Tokens пакет nuget:

var encoded = Base64UrlEncoder.Encode(someString);
var decoded = Base64UrlEncoder.Decode(encoded);

Для получения дополнительной информации: https://en.wikipedia.org/wiki/Base64#URL_applications

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