我正在将汽车拍卖网站作为一个大学项目。该网站使用网络服务来做所有事情,为了让我的生活更轻松,我让这个课程来存储有关汽车的信息:
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
属性或类似的东西?
答案 0 :(得分:1)
可以绕过其构造函数分配类的实例:
var car = (Car)FormatterServices.GetUninitializedObject(typeof(Car));
但是,正如MSDN所说:
当前方法只应用于反序列化时 用户打算立即填充所有字段。
所以我想这可能会在你的Web服务工作之下进行。