Json.NET:从块中写出来自控制器的响应

时间:2014-03-20 18:30:04

标签: c# asp.net-mvc json json.net

我有一个控制器,可以将大量JSON数据发送到移动应用。在某些情况下,数据有效负载很大 - 超过10兆字节。我们在应用中遇到了数据限制问题,因此我需要找到一种方法将数据拆分为更小的有效负载。

我们正在使用Json.NET来序列化我们的数据。我现在的解决方案是(一个黑客)检查我们发回的JSONResult的大小;如果它大于阈值,控制器将分页结果。我已经弄清楚如何获得响应的大小,但我还没弄清楚我将如何使用Json.NET将响应拆分为多个有效负载。

我看过Json.NET streamWriter,但看起来好像你必须手动编程(由于反序列化,我已经有了强类型对象)。有没有办法用Json.NET拆分JSON有效负载?

2 个答案:

答案 0 :(得分:5)

我建议您将其更改为与网页相同的工作方式...您不会在具有10Mb数据的网页中显示表格,因此这同样适用。因此,我们的想法是在您的REST API中实现分页

因此,第一个数据请求可以返回页面集中的数据,并包含指向下一页数据的链接:

GET/api/sync可能会给出:

{
    "count": "10",
    "total": "141",
    "next": "/api/sync?page=2"
    "data": [
        {
            "id": "101",
            "date": "2013-02-14"
        },
        {
            "id": "102",
            "date": "2013-02-18"
        }
        // More data here ...
    ]
}

您的同步代码可以读取第一页,请参阅next属性有网址,然后重复此过程:

GET/api/sync?page=2可能会给出:

{
    "count": "10",
    "total": "141",
    "next": "/api/sync?page=3"
    "data": [
        {
            "id": "111",
            "date": "2013-02-14"
        },
        {
            "id": "112",
            "date": "2013-02-18"
        }
        // More data here ...
    ]
}

我希望有所帮助。分页的字段或工作方式可能会有所不同,但在同步过程中会给您很多控制权。最新数据可以预先加载,其余数据可以在后台运行,同时让应用程序正常运行。

答案 1 :(得分:0)

是否有机会缩短物业名称?在将XML发送到SQL服务器并且SQL服务器内存不足时,我遇到过类似的问题。只使用一个字符作为标记名称有助于将大小缩小80%