1

我正在做一个汽车拍卖网站作为一个大学项目。该站点使用 Web 服务来完成所有操作,为了让我的生活更轻松,我创建了这个类来存储有关汽车的信息:

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属性或类似的东西?

4

1 回答 1

1

可以绕过类的构造函数来分配一个类的实例:

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

但是,正如MSDN所说:

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

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

于 2012-12-09T16:43:28.120 回答