【发布时间】:2018-05-08 10:02:17
【问题描述】:
亲爱的
我有一个从 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-server 那样序列化字节数组? 我有一个想法,用 Json 序列化它,然后用加号替换减号,用斜线替换下划线并删除最后两个等号。
还有其他方法可以立即开箱即用吗?
问候
【问题讨论】:
-
看起来像modified base64。
-
有许多不同的 base64 变体。看看这个:en.wikipedia.org/wiki/Base64#Variants_summary_table
-
@arekzyla:啊,你打败了我。 oleksa:但是,似乎没有办法在 C# 实现中指定变体。您只能告诉方法在每 76 个字符后用换行符格式化字符串。看来您必须自己实现才能获得正确的变体。您可能从 Web 服务器获得了 RFC7515 变体,并在 C# 中获得了 RFC4648。 Stefan Zvonar 在 John 链接的帖子中的回答很可能正是您需要做的。
标签: c# arrays string serialization json.net