2017-10-10 14 views
0

HTTP POST要求から大きなJSONストリームを消費しています。目標は、着信ボディをJsonTextReaderを使用してJSONとしてストリーミングし、組み込みのbase64でエンコードされたバイナリファイルをディスクに抽出することです。 XMLでは、同等のメソッドが XMLReader.ReadElementContentAsBase64Asyncである可能性があります。新しいストリームとしてJsonTextReaderの値を使用してBase64でエンコードされた文字列を渡す

JSON.NETを使用すると、文字列全体をメモリに保持することなく、encodedImages配列の各項目をFileStreamにどのように送信するのかを繰り返します。

例JSONオブジェクトは:1)どのように解析し、メモリ効率的な方法でJSONを処理するため、および2)どのような塩基を実行する:

{ 
    "company":"{clientCompany}", 
    "batchName":"{clientBatchName}", 
    "fileType":"{clientFileType}", 
    "encodedImages":[ 
     "{base64encodedimage}", 
     "{base64encodedimage}", 
     "{base64encodedimage}" 
    ], 
    "customFields":{ 
     "{clientCustomField1}":"{clientCustomValue}", 
     "{clientCustomField2}":"{clientCustomValue}", 
     "{clientCustomField3}":"{clientCustomValue}", 
     "{clientCustomField4}":"{clientCustomValue}" 
    } 
} 
+0

私はそうは思わない。 [この質問](https://stackoverflow.com/q/46365304/3744182)は決して答えられませんでした。これはIssue#1462 [JsonTextReader#1462にバイナリデータのバッファリングされた読み込みを追加](https:// github .com/JamesNK/Newtonsoft.Json/issues/1462)がオープンしました。 – dbc

+0

@dbcその問題は1時間前に提起され、質問は3週間前に尋ねられたようです。多分、私たちのスレッドを組み合わせることで意識が高まるでしょう:-) –

+0

Issue#1462にコメントを追加して、その能力も望みます。 – dbc

答えて

0

あなたの問題は2つの部分に取り組むことができるように思えます64デコード繰り返し

1)メモリ効率的なJSONの構文解析:

あなたはNewtonsoft JSON.netライブラリを使用することができると仮定すると、JsonReaderクラスのReadAsBytesまたはReadAsBytesAsyncの方法はあなたの最高のFRであることを行っていますJSONの解析と処理中にメモリフットプリントを最小限に抑えることができる反復ストリームベースの処理が可能になるためドキュメント全体の低レベルの解析コードを書くことを避けるために、例のencodedImagesノードのJsonConverter実装を記述することを検討してください。

2)反復ベース64復号

最もベース64の復号の実装は、その全体が文字列をデコードします。 (ReadElementContentAsBase64Asyncメソッドのサポートとしての)反復バッファードデコードのサポートは、ある状態を維持する必要があります。そのクラスの実装を掘り下げると、あなたが必要とするものを正確に行う内部のBase64Decoderクラスが見つかります。

関連する問題