2017-11-03 10 views
0

Json形式に変換してStreamオブジェクト経由でアップロードする必要があるオブジェクトがあります。これは、AWS S3のアップロードコードです:JsonをAWS S3バケットにNewtonsoft.Jsonで直接シリアル化

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

ここストリーム AWSS3Clientによって読み取られるストリームタイプです。 アップロードしているデータは、Json形式でなければならない複雑なオブジェクトです。

JsonConvert.SerializeObjectを使用してオブジェクトを文字列に変換することも、JsonSerializerを使用してファイルにシリアル化することもできますが、データ量が非常に重要です。一時的な文字列やファイルを避け、オブジェクトを読み込み可能なストリームにすぐに変換することをお勧めします。私の理想的なコードは次のようになります。

Newtonsoft.Jsonを使用してこれを達成する方法はありますか?

答えて

1

ここでは、プロデューサ/コンシューマストリームの2つが必要です。 BlockingStreamからthis StackOverflow questionまで、このストリームにはanother SO questionのように2番目のJson.Netシリアライザが書き込まれます。

+0

このアプローチでは、別のスレッドでBlockingStreamが必要になります。私の質問は簡単には見えません。 –

+0

あなたの最良の選択は一時ファイルを使用していると思います。 1つの大きな利点があります。何らかの理由でJsonのシリアル化が途中で失敗した場合、AWSストアに半分焼き付けられていないオブジェクトは残されません。カスタムプロデューサ/コンシューマストリームの上で適切な例外処理を実装することで、パフォーマンスを向上させることなく10行のコードを150にすることができます。一時ファイルはローカルであれば遅くなることはありません。 – archnae

+0

このコメントをあなたの答えに加えるべきです。基本的に私の魔法のシ​​リアライゼーションストリームは存在しませんし、最善の方法は、一時ファイルを使用するか、メモリストリームにシリアライズすることです。 –

関連する問題