C# 使用JsonTextReader值作为新流传递Base64编码字符串
我们正在使用来自HTTP Post请求的大型JSON流。目标是使用JsonTextReader将传入的主体作为JSON流,并将嵌入的base64编码的二进制文件提取到磁盘。在XML中,等效的方法可能是 XMLReader.ReadElementContentAsBase64Async 使用JSON.NET,当我们迭代如何将encodedImages数组的每个项发送到文件流中,而不将整个字符串保存在内存中 JSON对象示例:C# 使用JsonTextReader值作为新流传递Base64编码字符串,c#,json,http,json.net,filestream,C#,Json,Http,Json.net,Filestream,我们正在使用来自HTTP Post请求的大型JSON流。目标是使用JsonTextReader将传入的主体作为JSON流,并将嵌入的base64编码的二进制文件提取到磁盘。在XML中,等效的方法可能是 XMLReader.ReadElementContentAsBase64Async 使用JSON.NET,当我们迭代如何将encodedImages数组的每个项发送到文件流中,而不将整个字符串保存在内存中 JSON对象示例: { "company":"{clientCompany}",
{
"company":"{clientCompany}",
"batchName":"{clientBatchName}",
"fileType":"{clientFileType}",
"encodedImages":[
"{base64encodedimage}",
"{base64encodedimage}",
"{base64encodedimage}"
],
"customFields":{
"{clientCustomField1}":"{clientCustomValue}",
"{clientCustomField2}":"{clientCustomValue}",
"{clientCustomField3}":"{clientCustomValue}",
"{clientCustomField4}":"{clientCustomValue}"
}
}
您的问题似乎可以通过两个部分来解决:1)如何以内存高效的方式解析和处理JSON,以及2)如何迭代执行base-64解码 1) 节省内存的JSON解析: 假设您可以使用Newtonsoft JSON.net库,该类的
ReadAsBytes
或ReadasByteAsync
方法将是您最好的朋友,因为它们允许基于流的迭代处理,这将允许您在JSON解析和处理期间最小化内存占用。为了避免为整个文档编写低级解析代码,您可以考虑编写<代码> > JsonConverter >代码>实现,用于示例的<代码> EnCODE DimaSea/Cuth>节点。
2) 迭代base-64译码
大多数base-64解码实现对整个字符串进行解码。对迭代缓冲解码的支持(如
XmlReader
的ReadElementContentAsBase64Async
方法所支持的)需要维护一些状态。深入研究该类的实现,您会发现内部类正是您所需要的。您的问题似乎可以通过两个部分来解决:1)如何以内存高效的方式解析和处理JSON,以及2)如何迭代执行base-64解码
1) 节省内存的JSON解析:
假设您可以使用Newtonsoft JSON.net库,该类的ReadAsBytes
或ReadasByteAsync
方法将是您最好的朋友,因为它们允许基于流的迭代处理,这将允许您在JSON解析和处理期间最小化内存占用。为了避免为整个文档编写低级解析代码,您可以考虑编写<代码> > JsonConverter >代码>实现,用于示例的<代码> EnCODE DimaSea/Cuth>节点。
2) 迭代base-64译码
大多数base-64解码实现对整个字符串进行解码。对迭代缓冲解码的支持(如
XmlReader
的ReadElementContentAsBase64Async
方法所支持的)需要维护一些状态。深入研究该类的实现,您会发现内部类正好满足您的需要。我不这么认为。从未得到回答,这似乎导致问题#1462被打开。@dbc该问题似乎是在1小时前提出的,而该问题是在大约3周前提出的。也许我们的线程组合会提高意识:-)你可以在问题#1462中添加一条评论,表明你也希望拥有这种能力。我不这么认为。从未得到回答,这似乎导致问题#1462被打开。@dbc该问题似乎是在1小时前提出的,而该问题是在大约3周前提出的。也许我们的线程组合将提高意识:-)您可以随时在问题#1462中添加注释,表明您也希望使用该功能。JsonReader.ReadAsBytes[Async]()将整个值读取到字节数组中。JsonConverter也差不多。问题是:“如何将encodedImages数组的每个项发送到文件流中,而不将整个字符串保存在内存中”。JsonReader.ReadAsBytes[Async]()将整个值读取到字节数组中。JsonConverter也差不多。问题是:“如何将encodedImages数组的每个项发送到文件流中,而不将整个字符串保存在内存中?”。