在很长的 Json 字符串上使用 Context.Response.Write() 的正确方法

本文关键字:Write Response 方法 Context Json 字符串 | 更新日期: 2023-09-27 17:55:45

我正在使用 iis 和 asp.net 与 c#。

我有一个使用 JavaScriptSerializer 构建的 JSON 字符串,MaxJsonLength 设置为 Int32.MaxValue,现在我想使用 response.write 返回它,就像这个 Response.Write(myJsonString),但我想知道这是返回它的正确方法吗?如果字符串很长(也可能包含巨大的 64 个编码字节),如果它仍然在 int32.maxvalue 长度范围内,是否有任何问题,IIS 本身是否有任何限制(如我可以返回的最大长度)?还是应该编写一个循环来逐个字符发送字符串并每隔 x 个字符刷新响应?

顺便说一句,我是否应该在response.write的前面添加一个 UTF8 BOM 以确保我可以在接收端正确使用 JSON 字符串?如果 JSON 字符串包含 base64 编码字节,是否有任何影响?

在很长的 Json 字符串上使用 Context.Response.Write() 的正确方法

现在我想使用 response.write 返回这个,像这样 Response.Write(myJsonString),但我想知道这是正确的吗 如何退货?

与其使用 JavaScriptSerializer 类,不如考虑使用 JSON.NET 或内置DataContractJsonSerializer,它们都允许您直接序列化到输出流:

var serializer = new JsonSerializer();
serializer.Serialize(context.Response.Output, objectToSerialize);

这样,您无需在内存中加载整个 JSON 字符串。

如果字符串很长(可能包含巨大的 基数 64 编码字节也),如果它仍然落在 int32.maxvalue 内 长度,IIS 本身是否有任何限制(如最大值 长度我可以返回)

就IIS而言,我认为不会有问题。但正如我之前提到的,如果将序列化为字符串而不是直接将其流式传输到客户端,则会消耗服务器上的大量内存。

或者我应该写一个循环来逐个字符发送字符串,并且 每 x 个字符刷新一次响应?

这无济于事,因为内存中仍有整个 JSON 字符串。

顺便说一句,我也想问一下,我是否应该在前面添加一个 UT8 BOM 响应.write,以确保我可以使用 JSON 字符串 正确在接收器端?

如果您使用我之前提到的 2 个 JSON 序列化程序之一并将生成的 JSON 直接写入响应流,他们将负责添加此字符。