2017-02-16 17 views
0

Я пытаюсь вернуть тип списка из веб-службы. Я использовал аналогичную версию от here.Asp.net Webservice не работает во время возвращения Список <object>

я получаю следующую ошибку :

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; 
    } 

Спасибо за помощь заранее!

Update: После нескольких часов боролись, я обнаружил, что она не работает только тогда, когда мой список объектов содержит еще один сложный объект (например, массив/другой список). Он работает в противном случае. Следующий код дает отличный результат.

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

Но мне нужен список, содержащий список типа возврата. Есть ли способ создать определенный пользователем тип с необходимой структурой, которая будет сериализована через xml?

ответ

0

Я смог найти решение после большего поиска. Я думаю, когда мы будем использовать более сложные типы возвращаемых данных, нам нужно будет определить структуру, используя классы. Только тогда asp сможет сопоставить его иначе, он просто отображает неуместные сообщения об ошибках :). К счастью, у другого человека был similar question.

Пожалуйста, найдите код, приведенный ниже в случае, если вы ищете ответ:

[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; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^