【问题标题】:return two values from webservice从 web 服务返回两个值
【发布时间】:2012-04-28 20:37:03
【问题描述】:

可以从 WebService 向 jQuery 返回两个值。

我试过了

[WebMethod(EnableSession = true)]
public string testing(string testId)
{
    string data = string.Empty;
    string data1 = string.Empty;
    List<test1> datalist1 = new List<test1>();
    List<test> datalist = new List<test>();

    //coding
    data = jsonSerialize.Serialize(datalist1);
    data1 = jsonSerialize.Serialize(datalist);
    return [data,data1];
}

但它显示错误......我们如何从这里的 web 服务返回两个值......

【问题讨论】:

  • 您的示例代码中有两个语法错误,因此您看到错误并不奇怪。你确定这是你的代码吗?
  • 看看你的代码......你从 public string 开始,你返回什么???要返回多个值,您应该返回一个值数组。
  • 对不起,sixlettervariables 和 huMpty duMpty 这不是我的实际代码,我只是想知道是否可以从 web 服务返回多个值,这就是我在这里展示的示例程序跨度>

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


【解决方案1】:

我试过了

 return jsonSerialize.Serialize(new { list1 = datalist1, list = datalist });

我可以很容易地从我的 jQuery 文件中接收这些。谢谢大家的支持

【讨论】:

    【解决方案2】:

    另一种方法是创建一个具有您想要的两个返回值的自定义数据类型:

    [Serializable]
    public sealed class MyData
    {
        public string Data { get; set; }
        public string Data1 { get; set; }
    }
    

    ...

    [WebMethod(EnableSession = true)]
    public MyData testing(string testId)
    {
        string data = string.Empty;
        string data1 = string.Empty;
        List<test1> datalist1 = new List<test1>();
        List<test> datalist = new List<test>();
    
        //coding
        data = jsonSerialize.Serialize(datalist1);
        data1 = jsonSerialize.Serialize(datalist);
        return new MyData { Data = data, Data1 = data1 };
    }
    

    [Serializable]
    public sealed class MyData
    {
        public List<test> Data { get; set; }
        public List<test1> Data1 { get; set; }
    }
    

    ...

    [WebMethod(EnableSession = true)]
    public string testing(string testId)
    {
        MyData data = new MyData();
        string alldata = string.Empty;
        List<test1> datalist1 = new List<test1>();
        List<test> datalist = new List<test>();
    
        //coding
        data.Data = datalist1;
        data.Data1 = datalist;
        alldata = jsonSerialize.Serialize(data);
        return alldata;
    }
    

    【讨论】:

    • 感谢 Jesse,实际上我们已经将该方法声明为 String 类型,它显示转换错误,我如何在我的 jQuery 中接收这两个值??
    • 实际上我需要分别显示 data 和 data1 中的记录,这就是在这里传递这两个的内容,我尝试了 Jon Skeet 的解决方案,它的工作原理,但我不知道如何在 jQuery 中接收这个数组值,我尝试接收类似“成功:函数(数据,数据1){”......它显示错误
    • 恐怕我不懂jQuery,抱歉。
    【解决方案3】:

    webmethod 就像一个常规方法,它只能返回 一个 值。

    如果它的类型相同,您可以使用列表或数组。

    如果它的类型不同,您可以创建一个保存数据的类

    【讨论】:

      【解决方案4】:

      return [data, data1] 不是有效的 C# 语法。如果要向调用方返回 JSON 数组,请使用 JsonSerializer 序列化数组并返回结果字符串。

      【讨论】:

        【解决方案5】:

        你可以返回一个 array 字符串:

        public string[] Testing(...)
        {
            return new string[] { data, data1 };
        }
        

        然后,您需要在客户端上分别执行 JSON 反序列化的每一位,这不太可能令人愉快:(

        【讨论】:

        • 感谢 Jon 它的工作......我如何在 jQuery 中接收这两个值,如果它是一个我可以接收的值,例如“成功:函数(数据){”
        • @Shanish:我希望你能够使用data[0]data[1]。但我不能说我做过任何 JSON/jQuery 工作......
        • @JonSkeet - C# 4 看到了从方法返回元组的介绍 - 可以在这里以某种方式使用 Jon 吗?
        • @DanielMcNulty:我不知道这将如何在 Web 服务响应中表示。也许它会起作用 - 我不知道。
        • @JonSkeet - 有趣的是,我对 Web 服务知之甚少,但我知道序列化存在一定的复杂性,所以我会研究一下。我认为你最好暂时忽略我对元组的评论 Shanish。
        猜你喜欢
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多