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

问题描述 投票:0回答:2

我有一个对象必须转换为Json格式并通过Stream对象上传。这是AWS S3上传代码:

        AWSS3Client.PutObjectAsync(new PutObjectRequest()
        {
            InputStream = stream,
            BucketName = name,
            Key = keyName
        }).Wait();

这里的流是Stream类型,由AWSS3Client读取。我上传的数据是一个复杂的对象,必须是Json格式。

我可以使用JsonConvert.SerializeObject将对象转换为字符串或使用JsonSerializer序列化为文件,但由于数据量非常大,我宁愿避免使用临时字符串或文件,并立即将对象转换为可读的Stream。我理想的代码看起来像这样:

        AWSS3Client.PutObjectAsync(new PutObjectRequest()
        {
            InputStream = MagicJsonConverter.ToStream(myDataObject),
            BucketName = name,
            Key = keyName
        }).Wait();

有没有办法使用Newtonsoft.Json实现这一目标?

c# json amazon-s3 json.net
2个回答
1
投票

这里你需要两件事:一件是生产者/消费者流,例如:来自this StackOverflow question的BlockingStream,以及第二个,Json.Net序列化器写入此流,就像在这个another SO question中一样。


0
投票

另一个实用的选择是用gzip流包装内存流(2行代码)。 通常JSON文件会有很好的压缩(1GB文件可以压缩到50MB)。 然后在将流提供给S3时,用gzip steram将其解压缩,然后将其解压缩。 我想与临时文件比较的权衡是CPU与IO(两者都可能运行良好)。如果您可以将其压缩保存在S3上,它将节省您的空间并提高网络效率。

© www.soinside.com 2019 - 2024. All rights reserved.