【问题标题】:SQL 2008: returning data rows as JSON?SQL 2008:以 JSON 格式返回数据行?
【发布时间】:2010-08-07 23:31:07
【问题描述】:

我认为这个问题就像在射击粘土海龙。“拉……砰!” .. 被击落.. 不过,我相信值得一问。

现在很多 JS 框架等都使用 JSON,我知道这是有充分理由的。经典问题是“在哪里将数据转换为 JSON”。

我知道在管道中的某个时刻,您必须将数据转换为 JSON,无论是在数据访问层(我正在查看 JSON.NET)还是我相信在 .NET 4.x 中都有方法输出/序列化为 JSON。

所以问题是: 考虑将 SQL 函数输出为 JSON 真的是个坏主意吗?

预选赛: 我知道尝试像这样输出 1000 行并不是一个好主意——事实上,除非你真的必须这样做,否则对于 Web 应用程序来说这都不是一个好主意。 根据我的要求,我一次可能需要 100 行...

【问题讨论】:

    标签: c# .net sql json sql-server-2008


    【解决方案1】:

    答案确实是:视情况而定

    如果您的应用程序很小,没有得到太多使用,那么请务必在数据库中进行。不过要记住的是,当您的应用程序在 12 个月内被 10 倍的用户使用时会发生什么

    如果它可以让您在存储过程中实现 JSON 编码变得快速、简单和容易,而不是在您的 Web 代码中实现,并允许您将应用程序推出并投入使用,那么这显然是可行的方法。也就是说,使用其他答案中建议的解决方案“正确”完成它确实不需要太多工作。

    总而言之,选择最适合您当前需求的解决方案,同时考虑如果您将来需要更改它会产生什么影响。

    【讨论】:

      【解决方案2】:

      这就是 [WebMethod] (WebMethodAttribute) 存在的原因。

      【讨论】:

        【解决方案3】:

        最好将数据加载到程序中,然后以 JSON 格式返回。

        .NET 4 支持返回 json,我将它作为一个 ASP.NET MVC 站点的一部分,它相当简单明了。

        我建议将转换移出 sql server

        【讨论】:

          【解决方案4】:

          我同意其他受访者的观点,即在您的应用程序代码中这样做会更好。但是......这在理论上可以使用 SQL Server 使用create assembly 语法在数据库中包含 CLR 程序集的能力。选择真的是你的。您可以创建一个程序集以在 .net 中进行翻译,将该程序集定义为 SQL Server,然后使用包含的方法序列化为 JSON 作为存储过程的返回值...

          【讨论】:

            【解决方案5】:

            最好使用标准数据访问技术加载它,然后转换为 JSON。然后,您可以在 .NET 的标准对象以及客户端 javascript 中使用它。

            【讨论】:

              【解决方案6】:

              如果使用 .net mvc 在控制器中序列化结果并输出 JsonResult,则有一个方法 Controller.Json() 可以为您执行此操作。如果使用 webforms 一个 http 处理程序和 JavascriptSerializer 类将是要走的路。

              【讨论】:

                【解决方案7】:

                嘿,感谢您的所有回复.. 仍然让我感到惊讶的是,有多少人有时间提供帮助。

                所有要点都很好,并且肯定证实了我让应用程序/层完成转换工作的感觉 - 作为实际数据和前端之间的粘合剂。我想我对 MVC 或 SQL-2008 的了解并不多,因此不确定是否有一些值得追踪的掘金。

                正如它的结果(按照此处发布的一些链接,并进一步钓鱼),我暂时选择执行以下操作(暂时使用 .NET 3.5 并且没有 MVC..):

                1. 以数据表/数据读取器的形式获取 SQL 数据
                2. 使用简单的数据表 > 可序列化列表的集合(字典)转换
                3. 因为现在我正在使用 ASHX 页面充当 javascript 的代理(即 通过 JQuery AJAX 调用),在我的 ASHX 页面中:

                  context.Response.ContentType = "应用程序/json"; System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();

                4. 然后我可以发出:json.serialize()

                可能看起来有点落后,但它工作正常.. 主要警告是它不会一次返回大量数据。

                再次感谢大家的回复!

                【讨论】:

                • 你为什么不用 [WebMethod] 来装饰你的方法,这样你就不必手动编写样板代码了?
                猜你喜欢
                • 2011-06-11
                • 2017-02-24
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-08-11
                • 2017-08-08
                • 2014-09-04
                相关资源
                最近更新 更多