【问题标题】:How to return datatable / dataset from c# web service as JSON如何从 C# Web 服务返回数据表/数据集作为 JSON
【发布时间】:2010-11-26 12:52:55
【问题描述】:

我有网络服务通过使用返回字符串作为 JSON

[网络方法] [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

并使用标头 Content-type = application/json 从客户端调用它们

这一切都很顺利,直到我需要返回一个结果表。

我已尝试使用此处的代码 http://www.west-wind.com/Weblog/posts/471835.aspx 它成功地将我的数据集编码为 JSON 并返回一个字符串,但这反过来又使用转义符进行编码,作为 .net 服务返回的一部分,这根本不是想要的。为了获得正确编码为 JSON 的数据表或数据集,我的 WebMethod 应该返回什么类型?

【问题讨论】:

    标签: c# asp.net json web-services


    【解决方案1】:

    简短回答,在字符串上使用 eval,例如:var ds = eval(responseText);.

    我使用 Microsoft.Web.Preview.dll 而不是 Newtonsoft。我觉得 Newtonsoft 的代码比微软多一点。它会向您发送一个字符串,而不是 JSON 对象。而在 Microsoft 中,您不需要编写所有额外的代码。下载 Microsoft.Web.Preview.dll(称为 ASP.NET Futures)。将以下内容添加到您的 web.config:

    <system.web.extensions>
        <scripting>
            <webServices>
                <jsonSerialization maxJsonLength="33554432">
                    <converters>
                        <add name="DataSetConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter, Microsoft.Web.Preview"/>
                        <add name="DataRowConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter, Microsoft.Web.Preview"/>
                        <add name="DataTableConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter, Microsoft.Web.Preview"/>
                    </converters>
                </jsonSerialization>
            </webServices>
        </scripting>
    </system.web.extensions>
    

    【讨论】:

    • 简短的回答假设我使用 JavaScript 作为客户端。它实际上是一个 iPhone 应用程序。类似的东西可能会起作用,但 JSON 编码的 JSON 无论如何听起来都是个坏主意。我将尝试 ASP.NET Futures 技术,看看我能从中得到什么。
    • 我怀疑这会起作用,但我不确定依赖 Futures 的稳定性。
    • 我已将此标记为正确答案,因为尽管最终我选择了另一条路线,但我认为这可能最好地回答了这个问题。谢谢阿比宝贝
    • 你应该使用 ~JSON.parse~ 而不是 eval
    【解决方案2】:

    我通过创建一个代表我需要返回的数据的自定义类来解决这个问题,然后将服务的返回类型设置为 List 。这确实涉及一个额外的步骤来遍历数据表并构建列表,但最后我认为我更乐意返回对象列表而不是原始数据 - 无论如何这可能是一个更好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多