逗人
我有一个从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序列化它,然后用加号替换减号,用斜线替换下划线并删除最后两个等号。
任何其他方法立即开箱即用?
此致
答案 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