2017-10-10 13 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)은 답변을 얻지 못했고 문제 # 1462 [바이너리 데이터를 JsonTextReader # 1462에 버퍼링 된 읽기 추가] (https : // github .com/JamesNK/Newtonsoft.Json/issues/1462) 오픈. – dbc

+0

@dbc 그 문제는 1 시간 전에 제기 된 것으로 보입니다. 질문은 3 주 전쯤에 물었습니다. 어쩌면 우리 스레드가 결합되어 인지도가 높아질 것입니다 :-) –

+0

문제 # 1462에 언제든지 그 능력을 나타낼 수있는 의견을 추가 할 수 있습니다. – dbc

답변

0

당신의 문제는 두 부분으로 해결할 수 있습니다 것 같아 64 디코딩이 반복적으로

1) 메모리 효율적인 JSON 구문 분석 : 당신이 Newtonsoft JSON.net 라이브러리를 사용할 수 있습니다 가정

JsonReader 클래스의 ReadAsBytes 또는 ReadAsBytesAsync 방법이 최선 FR 될 예정 iends는 JSON 구문 분석 및 처리 중 메모리 사용 공간을 최소화 할 수있는 반복 스트림 기반 처리를 허용하므로 유용합니다. 전체 문서에 대해 낮은 수준의 구문 분석 코드를 작성하지 않으려면 예제의 encodedImages 노드에 JsonConverter 구현을 작성하는 것이 좋습니다.

2) 반복베이스 64 디코딩

대부분베이스 64 디코딩 구현은 그 전체 문자열을 디코딩. 반복적으로 버퍼 된 디코딩 (ReadElementContentAsBase64Async 메서드 지원으로 XmlReader)을 지원하려면 일부 상태를 유지해야합니다. 그 클래스의 구현을 파헤 치면, 필요한 것을 정확히 수행하는 내부 Base64Decoder 클래스를 찾을 수 있습니다.