/ / Pase la cadena codificada Base64 usando el valor JsonTextReader como nueva secuencia - c #, json, http, json.net, filestream

Pase la cadena codificada Base64 usando el valor JsonTextReader como nueva secuencia - c #, json, http, json.net, filestream

Estamos consumiendo grandes flujos JSON desde un HTTPPublicar solicitud. El objetivo es transmitir el cuerpo entrante como JSON utilizando JsonTextReader y extraer los archivos binarios codificados en base64 incrustados en el disco. En XML, un método equivalente podría ser XMLReader.ReadElementContentAsBase64Async.

Usando JSON.NET, como iterativo, cómo enviamos cada elemento de la matriz encodedImages a un FileStream sin tener toda la cadena en la memoria.

Ejemplo de objeto JSON:

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

Respuestas

0 para la respuesta № 1

Parece que su problema puede resolverse en dos partes: 1) Cómo analizar y procesar el JSON de manera eficiente en memoria, y 2) Cómo realizar la decodificación de base-64 de manera iterativa

1) Análisis JSON eficiente de la memoria:

Suponiendo que pueda utilizar la biblioteca Newtonsoft JSON.net, ReadAsBytes o ReadAsBytesAsync métodos del JsonReader clase van a ser tus mejores amigos, ya quepermite el procesamiento iterativo basado en la transmisión, lo que le permitirá minimizar su huella de memoria durante el análisis y procesamiento de JSON. Para evitar escribir código de análisis de bajo nivel para todo su documento, puede considerar escribir un JsonConverter implementación para el encodedImages nodo de tu ejemplo

2) decodificación iterativa de base-64

La mayoría de las implementaciones de decodificación de base 64 decodifican una cadena en su totalidad. Soporte para decodificación iterativa en búfer (como soporte por el ReadElementContentAsBase64Async método de XmlReader) requiere algún estado para mantenerse. Al profundizar en la implementación de esa clase, encontrará la información interna. Base64Decoder Clase que hace precisamente lo que necesitas.