2009-08-19 20 views
0

webserviceからenumにアクセスする必要があります。enumのようなクラスのシリアライズ

WebServiceが(列挙型定義でプリセット値を無視して)列挙に0ベースの整数を割り振るように、私は次のように構築された:

public class StatusType 
{ 
    public StatusVal Pending { get { return new StatusVal(1, "Pending"); } } 
    public StatusVal Authorised { get { return new StatusVal(2, "Authorised"); } } 
    public StatusVal Rejected { get { return new StatusVal(3, "Rejected"); } } 
    public StatusVal Sent { get { return new StatusVal(4, "Sent"); } } 
    public StatusVal InActive { get { return new StatusVal(5, "InActive"); } } 

    public List<StatusVal> StatusList() 
    { 
     List<StatusVal> returnVal = new List<StatusVal>(); 
     StatusType sv = new StatusType(); 
     returnVal.Add(sv.Pending); 
     returnVal.Add(sv.Authorised); 
     returnVal.Add(sv.Rejected); 
     returnVal.Add(sv.Sent); 
     returnVal.Add(sv.InActive); 

     return returnVal; 
    } 
} 

public class StatusVal 
{ 
    public StatusVal(int a, string b) 
    {   
     this.ID = a; 
     this.Name = b; 
    } 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

私は、その後、次のWebMethod属性でStatusValのリストを得る:

[WebMethod] 
public List<ATBusiness.StatusVal> GetStatus() 
{ 
    ATBusiness.StatusType a = new ATBusiness.StatusType(); 
    return a.StatusList(); 
} 

このWebメソッドを参照することはできませんが、エラーが発生します。StatusValは、パラメータのないコンストラクタがないため、シリアル化できません。

WebMethodの戻り値の型として定義されているStatusValue型にパラメータを渡す必要がありますか?

StatusList()メソッドごとにStatusValsのリストを返すには、これが必要です。

+0

[Serializable]属性でマークすることはできますか? –

答えて

1

エラーとして、クラスにはパラメータのないコンストラクタが必要です。シリアル化を解除すると、ランタイムは定義したものの代わりにそのコンストラクタを使用します。

ような何か:あなたはパラメータを持つコンストラクタを作成したとき

public StatusVal() 
{ 
} 

、あなたは自動的に削除されているデフォルトのパラメータなしのコンストラクタ、それはコンパイラが文句を言っているものです。

+0

したがって、StatusList()メソッドで作成された設定済みのリストを返すには、何が必要ですか? – callisto

+0

パラメータのないコンストラクタを追加すると、それが機能するはずです。 – pgb

関連する問題