代码之家  ›  专栏  ›  技术社区  ›  Andiih

如何将C_Web服务中的数据表/数据集作为JSON返回

  •  4
  • Andiih  · 技术社区  · 15 年前

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

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

    并从客户机使用headers content-type=application/json调用它们

    这一切进展顺利,直到我需要返回一个结果表。

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   user154901    15 年前

    简短回答,在字符串上使用eval,如:var ds=eval(responsetext);。

    我使用的是microsoft.web.preview.dll而不是newtonsoft。我觉得牛顿的代码比微软的要多得多。它向您发送一个字符串,而不是JSON对象。而在微软,你不需要编写所有额外的代码。下载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>
    
        2
  •  1
  •   Andiih    15 年前

    我通过创建一个自定义类来解决这个问题,该类表示我需要返回的数据,然后将服务的返回类型设置为一个列表。这确实需要一个额外的步骤来迭代数据表并构建列表,但最后我认为返回对象列表比返回原始数据更为高兴——无论如何,这可能是一个更好的实践。