我有一个对象必须转换为Json格式并通过Stream对象上传。这是AWS S3上传代码:
AWSS3Client.PutObjectAsync(new PutObjectRequest()
{
InputStream = stream,
BucketName = name,
Key = keyName
}).Wait();
此处流是流类型,由AWSS3Client读取。 我上传的数据是一个复杂的对象,必须是Json格式。
我可以使用JsonConvert.SerializeObject将对象转换为字符串或使用JsonSerializer序列化为文件,但由于数据量非常大,我宁愿避免使用临时字符串或文件,并立即将对象转换为可读的Stream。我理想的代码看起来像这样:
AWSS3Client.PutObjectAsync(new PutObjectRequest()
{
InputStream = MagicJsonConverter.ToStream(myDataObject),
BucketName = name,
Key = keyName
}).Wait();
有没有办法使用Newtonsoft.Json来实现这个目标?
答案 0 :(得分:1)
这里需要两件事:一件是生产者/消费者流,例如:来自this StackOverflow question的 BlockingStream ,其次是Json.Net序列化程序,在此another SO question中写入此流。
答案 1 :(得分:0)
另一个实用的选择是用gzip流(两行代码)包装内存流。
通常,JSON文件的压缩率很高(1GB的文件可以压缩到50MB)。
然后,在将流提供给S3时,请用gzip steram对其进行包装,然后对其进行解压缩。
我猜想,与临时文件相比,折衷方案是CPU vs IO(两者都可能工作良好)。如果您可以将其压缩后保存在S3上,那么它将节省您的空间并提高网络效率。