使用Newtonsoft.Json将Json直接序列化到AWS S3存储桶中

时间:2017-11-03 17:55:04

标签: c# json amazon-s3 json.net

我有一个对象必须转换为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来实现这个目标?

2 个答案:

答案 0 :(得分:1)

这里需要两件事:一件是生产者/消费者流,例如:来自this StackOverflow question BlockingStream ,其次是Json.Net序列化程序,在此another SO question中写入此流。

答案 1 :(得分:0)

另一个实用的选择是用gzip流(两行代码)包装内存流。
通常,JSON文件的压缩率很高(1GB的文件可以压缩到50MB)。
然后,在将流提供给S3时,请用gzip steram对其进行包装,然后对其进行解压缩。
我猜想,与临时文件相比,折衷方案是CPU vs IO(两者都可能工作良好)。如果您可以将其压缩后保存在S3上,那么它将节省您的空间并提高网络效率。