从apicontroller返回JSON流



我有一个 json对象,我需要从mvc apicontroller返回。

我不能简单地将JSON对象返回,因为序列化内容的内部序列化器barfs barfs太长。

我不想序列化并返回字符串,因为我们可以处理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块,然后将所有内容保留在此处:

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字节的响应。有人可以向我指向正确的方向吗?

您是否尝试过在web.config/machine.config中检查超时设置?也许IIS决定需要花费太长时间才能得到回应。

无论如何,您应该使用跟踪使用失败的请求检查此问题 - 这应该指向正确的方向。

事实证明,这对我而言是一个愚蠢的错误...我没有冲洗作家并重置流位置...

JsonWriter.Flush()
MemoryStream.Seek(0, StreamPosition.Beginning)

解决了问题

相关内容

  • 没有找到相关文章

最新更新