0

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

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

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

4

1 回答 1

2

现在我想使用response.write返回这个,就像这个Response.Write(myJsonString),但我想知道这是返回它的正确方法吗?

而不是使用 JavaScriptSerializer 类,您可能会考虑使用JSON.NET或内置的,DataContractJsonSerializer它们都允许您直接序列化到输出流:

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

这样您就不需要将整个 JSON 字符串加载到内存中。

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

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

还是我应该编写一个循环来逐个字符地发送字符串并每隔 x 个字符刷新一次响应?

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

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

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

于 2013-01-24T06:49:56.163 回答