我有一个需要从 MVC ApiController 返回的大型JSON 对象。
我不能简单地将 JSON 对象作为内部序列化程序返回,因为序列化内容太长。
我不想序列化为字符串然后返回字符串,因为我们可能要处理 5-6MB 的数据,这似乎是无缘无故地浪费内存。
我想要做的是使用 Newtonsoft JSON Serializer 直接写入响应流。
Dim Ret = Client.Search(Model) ''Get the results object
Dim Response As New HttpResponseMessage()
Using MemoryStream As New IO.MemoryStream
Using StreamWriter As New StreamWriter(MemoryStream)
Using JsonWriter As JsonWriter = New JsonTextWriter(StreamWriter)
Dim Serializer As New JsonSerializer
Serializer.Serialize(JsonWriter, Ret)
End Using
End Using
Response.Content = New StreamContent(MemoryStream)
Return Response
End Using
不幸的是,这会导致连接被意外重置——我猜这是由于流在完成发送结果之前被处理掉了?
即使我去掉所有的Using
块并把所有的东西都留给 GC,如下所示:
Dim Ret = Client.Search(Model)
Dim Response As New HttpResponseMessage()
Dim MemoryStream As New IO.MemoryStream
Dim StreamWriter As New StreamWriter(MemoryStream)
Dim JsonWriter As JsonWriter = New JsonTextWriter(StreamWriter)
Dim Serializer As New JsonSerializer
Serializer.Serialize(JsonWriter, Ret)
Response.Content = New StreamContent(MemoryStream)
Return Response
我得到一个 0 字节的响应。有人可以指出我正确的方向吗?