C# 使用JsonTextReader值作为新流传递Base64编码字符串

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}",

我们正在使用来自HTTP Post请求的大型JSON流。目标是使用JsonTextReader将传入的主体作为JSON流,并将嵌入的base64编码的二进制文件提取到磁盘。在XML中,等效的方法可能是 XMLReader.ReadElementContentAsBase64Async

使用JSON.NET,当我们迭代如何将encodedImages数组的每个项发送到文件流中,而不将整个字符串保存在内存中

JSON对象示例:

{
    "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数组的每个项发送到文件流中,而不将整个字符串保存在内存中?”。