我正在使用带有c#的iis和asp.net。
我有一个JSON字符串,我使用JavaScriptSerializer构建,MaxJsonLength设置为Int32.MaxValue,现在我想使用response.write返回它,就像这个Response.Write(myJsonString),但我想知道这是正确的回归的方式呢?如果字符串很长(如果它仍然包含巨大的base 64编码字节),如果它仍然在int32.maxvalue长度内,是否有任何问题,IIS本身是否有任何限制(如我可以返回的最大长度)?或者我应该写一个循环来逐字符发送字符串并刷新每x个字符的响应?
顺便说一下,我应该在response.write
的前面添加一个UTF8 BOM,以确保我可以在接收方端正确使用JSON字符串吗?如果JSON字符串包含base64编码的字节,是否有任何影响?
答案 0 :(得分:2)
现在我想使用response.write返回这个,就像这样 Response.Write(myJsonString),但我想知道这是正确的 返回的方式?
您可以考虑使用JSON.NET
或内置DataContractJsonSerializer
,而不是使用JavaScriptSerializer类,它们都允许您直接序列化到输出流:
var serializer = new JsonSerializer();
serializer.Serialize(context.Response.Output, objectToSerialize);
这样您就不需要在内存中加载整个JSON字符串了。
如果字符串非常长(可能包含巨大的字符串),是否有任何问题 如果它仍然在int32.maxvalue内,则基本64位编码的字节) 长度,iis本身是否有任何限制(如最大值 我可以回来的长度)
就IIS而言,我认为不存在问题。但正如我之前提到的,如果您将序列化执行到字符串而不是直接将其流式传输到客户端,则会在服务器上消耗大量内存。
或者我应该写一个循环来按字符和字符串发送字符串 每x个字符刷新一次响应?
这没有多大帮助,因为你仍然在内存中拥有整个JSON字符串。
作为一个旁边,我也想问,我应该在前面添加一个ut8 bom response.write确保我可以使用json字符串 在接收器端正确吗?
如果您使用我之前提到的2个JSON序列化程序之一并将生成的JSON直接写入响应流,他们将负责添加此字符。