繁体   English   中英

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

[英]How to return datatable / dataset from c# web service as JSON

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM