C# - 尽管使用了没有无参数构造函数的类,Web服务仍然可以工作

时间:2012-12-09 15:59:03

标签: c# asp.net web-services serialization

我正在将汽车拍卖网站作为一个大学项目。该网站使用网络服务来做所有事情,为了让我的生活更轻松,我让这个课程来存储有关汽车的信息:

public class Car
{
    private int id;
    private string name;
    private string desc;
    private int startbid;
    private DateTime closingdate;
    public int Id
    {
        get
        {
            return id;
        }
    }
    public string Name
    {
        get
        {
            return name;
        }
    }
    public string Description
    {
        get
        {
            return desc;
        }
    }
    public int StartBid
    {
        get
        {
            return startbid;
        }
    }
    public DateTime ClosingDate
    {
        get
        {
            return closingdate;
        }
    }
    public Car(int id, string name, string desc, int startbid, DateTime closingdate)
    {
        this.id = id;
        this.name = name;
        this.desc = desc;
        this.startbid = startbid;
        this.closingdate = closingdate;
    }

}

每当我尝试在浏览器中查看.asmx时,我都会收到一条错误消息,说这个类无法序列化,因为它没有无参数构造函数,但使用Car类的所有内容仍然可以正常运行网站(例如,显示汽车信息的页面显示所有内容,没有例外)。因此,Web服务仍在工作,并且Car类仍在序列化。这怎么可能?

编辑:我知道要让我的.asmx正常显示,我需要将public Car() {}添加到我的课程中,但我还需要为每个属性添加set方法,我不知道我真的想做,因为这些结果是从数据库中提取的,因此(在这种情况下)是只读的。那么在这种情况下,适当的解决方案是什么?也许是Obsolete属性或类似的东西?

1 个答案:

答案 0 :(得分:1)

可以绕过其构造函数分配类的实例:

var car = (Car)FormatterServices.GetUninitializedObject(typeof(Car));

但是,正如MSDN所说:

  

当前方法只应用于反序列化时   用户打算立即填充所有字段。

所以我想这可能会在你的Web服务工作之下进行。