C# 将字节数组转换为字符串,但不使用convert.ToBase64

C# 将字节数组转换为字符串,但不使用convert.ToBase64,c#,arrays,string,serialization,json.net,C#,Arrays,String,Serialization,Json.net,亲爱的 我有一个从web服务器返回的字节数组,它是json序列化对象(属性值)的一部分 在json字符串中如下所示: ,"n":"y1GpP7FibyTYl40Jhx1B90WOi1mecJfpi4IEhbHPbAB64jhV16UlpEPyGpNIzDS4Lct80sIs7FW5Vnf38Z-tzPbtHyFVYYU2AC4SVrwQp9-ELz-..._xW3bmMxuwoBgHpWDTw" 请注意,末尾没有双等号,就像Base64字符串一样。我使用了三个点(…)使字符串表示稍微短一点 我

亲爱的

我有一个从web服务器返回的字节数组,它是json序列化对象(属性值)的一部分 在json字符串中如下所示:

,"n":"y1GpP7FibyTYl40Jhx1B90WOi1mecJfpi4IEhbHPbAB64jhV16UlpEPyGpNIzDS4Lct80sIs7FW5Vnf38Z-tzPbtHyFVYYU2AC4SVrwQp9-ELz-..._xW3bmMxuwoBgHpWDTw"
请注意,末尾没有双等号,就像Base64字符串一样。我使用了三个点(…)使字符串表示稍微短一点
我可以反序列化对象并获得正确的字节数组:

var kb = JsonConvert.DeserializeObject<KeyBundle>(Properties.Resources.keyBundleJson);
但问题是结果属性值看起来与原始字符串不同:

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

serialized locally:
y1GpP7FibyTYl40Jhx1B90WOi1mecJfpi4IEhbHPbAB64jhV16UlpEPyGpNIzDS4Lct80sIs7FW5Vnf38Z+tzPbtHyFVYYU2AC4SVrwQp9+ELz+.../xW3bmMxuwoBgHpWDTw==
下划线和斜杠,加号和减号,结尾两个等号

是否可以像web服务器一样序列化字节数组? 我想用Json序列化它,然后用加号替换减号,用斜杠替换下划线,并删除最后两个等号

有没有其他方法可以让它立即开箱


关于在URL中,与
-
-
一起使用的Base64有不同的变体,不需要额外编码(例如
+
将被编码为
%2B
)。为此,您可以简单地使用string
Replace
方法替换这些字符

如果您想要现成的解决方案,可以尝试nuget软件包:

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

有关更多信息:

它看起来像。有许多不同的base64变体。看看这个:@arekzyla:啊,你比我早到了。oleksa:但是,似乎没有办法在C#实现中指定变量。您只能告诉方法在每76个字符后使用换行符格式化字符串。看来你必须自己实现才能得到正确的变体。您可能从web服务器获得了RFC7515变体,并在C#中获得了RFC4648。Stefan Zvonar在John linked帖子中的回答很可能正是您需要做的。
string base64urlcoder.Encode(byte[]inArray)
做得很好,谢谢
var encoded = Base64UrlEncoder.Encode(someString);
var decoded = Base64UrlEncoder.Decode(encoded);