是否可以将任意文件转换为字符串? (C#)

时间:2014-06-23 19:27:25

标签: c# json

我需要将任意数量的文件(包含任何文件类型)存储为类的属性。此类将序列化为JSON文件。稍后,用户可以将JSON文件加载回应用程序,并能够重新创建最初加载的文件。现在我将文件存储为字节数组。问题是某些文件很大,而且字节数组太大而导致序列化/反序列化需要很长时间。

有没有办法可以将文件存储为字符串/字符串数组而不是字节数?或者一些不同的存储文件的方式?有哪些方法可以解决这个问题?

修改: 我相信一个字符串会更快,因为现在当字节数组以ascii格式呈现在JSON中时,所以它看起来像这样: 150,123,43,62 ...

2 个答案:

答案 0 :(得分:1)

使用Convert.ToBase64String()将字节数组编码为base 64字符串。这应该会显着减小JSON的大小:http://rextester.com/ILJNV57711

例如,这是一个随机字节数组,序列化为JSON:

[95,103,154,174,23,5,178,179,158,186,181,89,40,229,233,168,217,42,98,65,248]

这里是相同的数组,转换为基本64字符串,序列化为JSON:

"X2earhcFsrOeurVZKOXpqNkqYkH4"

很明显,当表示为基本64字符串时,JSON中的字节数组较小。它从76个字符到30个。

答案 1 :(得分:1)

当然不要将字节数组存储为十进制数字; Base64至少对它进行编码。 Base64编码会将数据放大到原始文件大小的133%,但与目前正在使用的400%放大相比,这将是一个巨大的进步。