Pracuję na wykresie linii za pomocą Chartjs i otrzymuję błąd z mojej strony internetowej. Oto kod usługi:

[WebMethod]
    public List<object> getProgram12Months(string usersessionid)
    {
        List<object> iData = new List<object>();
        List<string> labels = new List<string>();

        //First get distinct Month Name for select Year.
        string query1 = "SELECT DISTINCT TOP (100) PERCENT TimeFrame FROM dbo.CSQ_ProgramCount12Months ORDER BY TimeFrame ";

        string conn = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
        SqlDataAdapter dap = new SqlDataAdapter(query1, conn);
        DataSet ds = new DataSet();
        dap.Fill(ds);
        DataTable dtLabels = ds.Tables[0];


        foreach (DataRow drow in dtLabels.Rows)
        {
            labels.Add(drow["TimeFrame"].ToString());
        }
        iData.Add(labels);

        return iData;
    }

Kiedy nazywam metodą z przeglądarki, otrzymuję następujący błąd:

System.InvalidOperationException: Wystąpił błąd generujący dokument XML. ---> System.InvalidOpreationException: System Type.Colctions.generic.list`1 [[System

Opieram go Off to.

2
user3232602 23 luty 2019, 17:47

2 odpowiedzi

Najlepsza odpowiedź

Lista nie jest serializowana do metody sieci Web zamiast tego możesz zwrócić obiekt [].

[WebMethod]
    public object[] getProgram12Months(string usersessionid)
    {
        List<object> iData = new List<object>();
        List<string> labels = new List<string>();

        //First get distinct Month Name for select Year.
        string query1 = "SELECT DISTINCT TOP (100) PERCENT TimeFrame FROM dbo.CSQ_ProgramCount12Months ORDER BY TimeFrame ";

        string conn = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
        SqlDataAdapter dap = new SqlDataAdapter(query1, conn);
        DataSet ds = new DataSet();
        dap.Fill(ds);
        DataTable dtLabels = ds.Tables[0];


        foreach (DataRow drow in dtLabels.Rows)
        {
            labels.Add(drow["TimeFrame"].ToString());
        }
        iData.Add(labels.ToArray());

        return iData.ToArray();
    }
2
er-sho 24 luty 2019, 02:13

Rozwiązałem to, tworząc dwie klasy, populdując je. Dziękuję Er-Sho, twoje posty pomagają mnie prowadzić we właściwym kierunku.

public class ChartData2
    {
        public List<string> Legends;
        public List<int> AD;


    }

    public class Legend
    {
        public List<string> Months;
    }
2
user3232602 24 luty 2019, 14:47