2017-10-10 47 views
0

我們正在使用來自HTTP Post請求的大型JSON流。目標是使用JsonTextReader將傳入的主體以JSON流式傳輸,並將嵌入式base64編碼的二進制文件提取到磁盤。在XML中,等效方法可能是 XMLReader.ReadElementContentAsBase64Async。將使用JsonTextReader值的Base64編碼字符串傳遞爲新流

使用JSON.NET,當我們迭代時,我們如何將encodedImages數組的每個項目發送到FileStream中,而無需在內存中保存整個字符串。

例JSON對象:

{ 
    "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)從來沒有回答,這似乎導致問題#1462 [添加到JsonTextReader#1462二進制數據的緩衝讀取](https:// github .com/JamesNK/Newtonsoft.Json/issues/1462)被打開。 – dbc

+0

@dbc看來這個問題是在1小時前提出的,問題在3周前被問到。也許我們的線程結合起來可以提高人們的認識:-) –

+0

你總是可以給問題#1462添加一條評論,表明你也會喜歡這個能力。 – dbc

回答

0

這似乎是你的問題可以分爲兩個部分來解決:1)如何分析和在存儲有效的方式處理JSON,和2)如何執行鹼基64解碼反覆

1)內存高效的JSON解析:

假設你可以使用Newtonsoft JSON.net圖書館,JsonReader類的ReadAsBytesReadAsBytesAsync方法都將是你最好的FR iends,因爲它們允許迭代基於流的處理,這將允許您在JSON解析和處理期間最大限度地減少內存佔用。爲避免爲整個文檔編寫低級分析代碼,您可以考慮爲示例的encodedImages節點編寫一個JsonConverter實現。

2)迭代基-64解碼

大多數鹼-64解碼的實現解碼其全部字符串。支持迭代緩衝解碼(作爲方法XmlReader的支持)需要維護一些狀態。深入瞭解該課程的實施情況,您會發現內部的Base64Decoder課程正是您所需要的。

相關問題