2017-02-16 10 views
0

Webサービスからリスト型を返そうとしています。私はhereから同様のバージョンを使用しました。Asp.net Webserviceがリストを返すときに機能しない<object>

私は、次のエラー取得:

のSystem.InvalidOperationExceptionを:XMLドキュメントを生成するエラーが発生しました。 ---> System.InvalidOperationException:型 System.Collections.Generic.List`1 [[System.String、mscorlib、 バージョン= 4.0.0.0、Culture =ニュートラル、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; 
    } 

ありがとう!

更新:苦労の時間後 が、私は私のリストオブジェクトは、(配列/別のリストのような)別の複雑なオブジェクトが含まれている場合、それだけで動作しないことを見出しました。そうでなければ動作します。次のコードは完全な結果をもたらします。

しかし、リストを含むリストが返されるタイプが必要です。必要な構造体を持つユーザー定義型を作成する方法はありますか?これはxmlによって直列化可能ですか?

答えて

0

私は、より多くの検索の後で解決策を見つけることができました。私たちがより複雑なリターン型を使用する場合、クラスを使用して構造体を定義する必要があります。それだけで、aspはそれ以外のものをマップすることができます。それは無関係のエラーメッセージを表示します:)。 Thankfully別の人は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; 
    } 
関連する問題