如何将C# Web服务中的DataTable / DataSet作为JSON返回

4

我有一些Web服务返回JSON字符串,通过使用以下代码:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

并且在客户端使用Content-type = application/json头来调用它们。

这一切都进行得很顺利,直到我需要返回一张结果表。

我尝试使用此处的代码将我的数据集编码为JSON并返回一个字符串,但是这个字符串又被.net服务返回时编码为转义字符,这不是我想要的。那么我的WebMethod应该返回什么类型才能使datatable或dataset正确地编码为JSON?

2个回答

3
使用eval对字符串进行求值,例如:var ds = eval(responseText)。
我使用Microsoft.Web.Preview.dll而不是Newtonsoft。我觉得Newtonsoft的代码比Microsoft多一些。它会发送一个字符串,而不是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技术,看看我能得到什么。 - Andiih
我猜这应该可以运行,但是我不确定依赖于 Futures 的稳定性。 - Andiih
我已将此标记为正确答案,因为尽管最终我选择了另一种方法,但我认为这可能最好地回答了这个问题。谢谢Abibaby - Andiih
你应该使用 JSON.parse 而不是 eval。 - Adam Marshall

1
我通过创建一个自定义类来解决这个问题,该类代表了我需要返回的数据,然后将服务的返回类型设置为List。这确实需要额外的步骤来迭代datatable并构建列表,但最终我认为返回对象列表比原始数据更好 - 这可能是更好的做法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接