枚举类的可序列化

时间:2009-08-19 12:19:12

标签: c#-3.0 asmx

我需要通过网络服务访问枚举。

由于web服务将基于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();
}

我不能使用这个webmethod作为引用它,我得到错误:StatusVal无法序列化,因为它没有无参数构造函数。

我不太明白:我应该将params传递给定义为WebMethod的返回类型的StatusValue类型吗?

我需要根据StatusList()方法返回StatusVals列表。

1 个答案:

答案 0 :(得分:1)

正如错误所说,你的类需要一个没有参数的构造函数。反序列化时,运行时将使用该构造函数而不是您定义的构造函数。

类似的东西:

public StatusVal()
{
}

当您使用参数创建构造函数时,您将自动删除默认的无参数构造函数,这就是编译器所抱怨的内容。