如何从c#web服务返回数据表/数据集作为JSON

时间:2009-09-08 14:45:25

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

我有Web服务通过使用

将字符串作为JSON返回
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

并使用标题Content-type = application / json

从客户端调用它们

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

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

2 个答案:

答案 0 :(得分:3)

简短回答,对字符串使用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>

答案 1 :(得分:1)

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