如何从 C# Web 服务返回数据表/数据集作为 JSON
Posted
技术标签:
【中文标题】如何从 C# Web 服务返回数据表/数据集作为 JSON【英文标题】:How to return datatable / dataset from c# web service as 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 应该返回什么类型?
【问题讨论】:
【参考方案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 。这确实涉及一个额外的步骤来遍历数据表并构建列表,但最后我认为我更乐意返回对象列表而不是原始数据 - 无论如何这可能是一个更好的做法。
【讨论】:
以上是关于如何从 C# Web 服务返回数据表/数据集作为 JSON的主要内容,如果未能解决你的问题,请参考以下文章