将字节数组转换为字符串但不转换为Convert.ToBase64

时间:2018-05-08 10:02:17

标签: c# arrays string serialization json.net

逗人

我有一个从Web服务器返回的字节数组,它是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==

下划线和斜线,加号和减号,最后两个等号

是否可以完全按照Web服务器的方式序列化字节数组? 我有一个想法,用Json序列化它,然后用加号替换减号,用斜线替换下划线并删除最后两个等号。

任何其他方法立即开箱即用?

此致

1 个答案:

答案 0 :(得分:1)

在网址中,与-_一起使用的Base64的不同变体不需要额外的编码(例如,+将被编码为%2B)。为此,您只需使用字符串Replace方法来替换这些字符。

如果您想要一个开箱即用的解决方案,可以试试Microsoft.IdentityModel.Tokens nuget包:

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

了解更多信息:https://en.wikipedia.org/wiki/Base64#URL_applications