为什么Newtonsoft.Json将byte []序列化为base64而不是sbyte []?

时间:2019-03-14 01:17:50

标签: c# serialization json.net base64 bytestring

使用base64编码的字节[]编码,而不使用sbyte []编码。

byte[] bs = {100,101};
Newtonsoft.Json.JsonConvert.SerializeObject(bs);//"ZGU="

sbyte[] sbs = {100,101};
Newtonsoft.Json.JsonConvert.SerializeObject(sbs);//"[100,101]"

2 个答案:

答案 0 :(得分:7)

这只是JSON.Net的工作方式,我怀疑大多数序列化程序都会这样做。检查documentation,其中明确指出byte[]已序列化为base64编码的字符串。

所有其他数组都将按照您期望的方式处理,就像简单的JSON数组类型一样,其中元素根据数组类型的规则进行序列化。这意味着sbyte[]将被序列化为整数数组。

答案 1 :(得分:1)

JSON.Net文档中的serialization guide显示sbyte[]数组没有序列化规则。但是,有sbyte条目。 sbyte将被序列化为int

byte[]数组将被序列化为base64字符串,因为它在指南中已明确定义,并且很方便。

由于序列化指南中没有sbyte[]规则,因此该数组将像其他任何数组一样被对待,并且其成员将根据该指南进行序列化。因此,由于sbyte[]序列化为int[]sbyte被序列化为int

请参见下图:

enter image description here