我有Web服务通过使用
将字符串作为JSON返回[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
并使用标题Content-type = application / json
从客户端调用它们这一切都很顺利,直到我需要返回结果表。
我在这里尝试过使用这些代码 http://www.west-wind.com/Weblog/posts/471835.aspx 它成功地将我的数据集编码为JSON并返回一个字符串,但这又用转义编码,作为从.net服务返回的一部分,这根本不是想要的。我的WebMethod应该返回什么类型才能将数据表或数据集正确编码为JSON?
答案 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。这确实需要额外的步骤来遍历数据表并构建列表,但最后我认为我更乐意返回对象列表而不是原始数据 - 无论如何它可能是更好的做法。