繁体   English   中英

返回List时,Asp.net Webservice无法正常工作<object>

[英]Asp.net Webservice not working while returning List<object>

我试图从Web服务返回List类型。 我从这里使用了类似的版本。

我收到以下错误

System.InvalidOperationException:生成XML文档时出错。 ---> System.InvalidOperationException:类型System.Collections.Generic.List`1 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]可能不会在此上下文中使用。

码:

 [WebMethod]
    public List<object> getnpsTrend(string region, string client, string product)
    {
        List<object> iData = new List<object>();
        List<string> labels = new List<string>();

        labels.Add ("test1");
        iData.Add(labels);
        return iData; 
    }

感谢您的帮助!

更新:经过几个小时的挣扎,我发现它只有在我的列表对象包含另一个复杂对象(如数组/另一个列表)时才起作用。 它的工作方式不然。 以下代码可以产生完美的结果。

[WebMethod]
    public List<Object> getnpsTrend()
    {
        List<Object> li = new List<object>();
        string obj = "Test";
        li.Add(obj);
        return li ;
    }

但我需要一个包含列表的列表作为返回类型。 有没有什么办法可以创建一个具有所需结构的用户定义类型,可以通过xml进行序列化?

经过多次搜索,我找到了解决方案。 我想,当我们使用更复杂的返回类型时,我们将不得不使用类来定义结构。 只有那时asp能够映射它,否则它只显示不相关的错误消息:)。 值得庆幸的是,另一个人有类似的问题

如果您正在寻找答案,请找到以下代码:

[WebMethod]        
    public List<ChartDatasets> getnpsTrend(string region, string client, string product)
    {
        List<ChartDatasets> chart1 = new List<ChartDatasets>();
        List<string> lblnames = new List<string>();

        DataTable dt = biz.FetchData_RCP("", region, client, product);
        dt.TableName = "data";
        foreach (DataRow drow in dt.Rows)
        {
            lblnames.Add(drow["Timeline"].ToString());                
        }


        Labels lbl1 = new Labels();
        lbl1.LabelNames = lblnames;


        List<Decimal> lst_dataItem_1 = new List<Decimal>();
        foreach (DataRow dr in dt.Rows)
        {
            lst_dataItem_1.Add(Convert.ToDecimal(dr["NPSScore"].ToString()));
        }
        dataset_deci ds1_class = new dataset_deci();
        ds1_class.Value = lst_dataItem_1;

        List<Decimal> lst_dataItem_2 = new List<Decimal>();
        foreach (DataRow dr in dt.Rows)
        {
            lst_dataItem_2.Add(Convert.ToDecimal(dr["Promoter_Count"].ToString()));
        }
        dataset_deci ds2_class = new dataset_deci();
        ds2_class.Value = lst_dataItem_2;


        chart1.Add(new ChartDatasets { Lbls = new List<Labels> { lbl1 }, ds1 = new List<dataset_deci> { ds1_class }, ds2 = new List<dataset_deci> { ds2_class } });
        return chart1;
    }

    public class ChartDatasets
    {
        public List<Labels> Lbls;
        public List<dataset_deci> ds1;
        public List<dataset_deci> ds2;
    }

    public class Labels
    {
        public List<string> LabelNames;
    }

    public class dataset_deci
    {
       public List<Decimal> Value;
    }

暂无
暂无

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

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