我试图在我的webservice中添加一个构造函数,如下所示:
public class ILotusNotesService : System.Web.Services.WebService
{
List<Calendar> cal = new List<Calendar>();
[WebMethod]
public List<Calendar> GetAllCal(string room)
{
DateTime d_start = new DateTime(2012,1,3,12,30,0);
DateTime d_end = new DateTime(2012, 1, 3, 13, 00, 0);
Calendar c1 = new Calendar("Søren Steffensen", "Mødelokale 1", "Privat", d_start, d_end);
DateTime d_start2 = new DateTime(2012, 1, 3, 13, 30, 0);
DateTime d_end2 = new DateTime(2012, 1, 3, 14, 00, 0);
Calendar c2 = new Calendar("Knud Olesen", "Mødelokale 1", "Privat", d_start2, d_end2);
DateTime d_start3 = new DateTime(2012, 1, 3, 15, 30, 0);
DateTime d_end3 = new DateTime(2012, 1, 3, 16, 00, 0);
Calendar c3 = new Calendar("Morten Nielsen", "Mødelokale 1", "Miljø Politik", d_start3, d_end3);
cal.Add(c1);
cal.Add(c2);
cal.Add(c3);
return cal;
}
构造函数看起来像这样
[DataContract(Name = "Calendar")]
public class Calendar: System.Web.Services.WebService
{
[DataMember(Name = "_meetingHolder")]
public String _meetingHolder { get; set; }
[DataMember(Name = "_meetingRoom")]
public String _meetingRoom { get; set; }
[DataMember(Name = "_status")]
public String _status { get; set; }
[DataMember(Name = "_startTime")]
public DateTime _startTime { get; set; }
[DataMember(Name = "_endTime")]
public DateTime _endTime { get; set; }
public Calendar(string meetingHolder, string MeetingRoom,string status, DateTime startTime, DateTime endTime)
{
this._meetingHolder = meetingHolder;
this._meetingRoom = MeetingRoom;
this._status = status;
this._startTime = startTime;
this._endTime = endTime;
}
}
但我一直收到这个错误:
LotusNotesServiveLibrary.Calendar无法序列化,因为它没有默认的公共构造函数
答案 0 :(得分:4)
编写可以序列化的对象时,必须提供一个没有参数的构造函数(默认构造函数):
public Calendar()
原因是当对象被反序列化时,反序列化器必须具有创建对象实例的默认方式。
答案 1 :(得分:3)
必须满足该要求,并且一旦添加了带参数的构造函数,编译器将不再为您生成默认的无参数构造函数。你可以这样做:
public Calendar() {
}
但是你的成员变量不会被初始化。如果您有想要使用的默认值,您也可以这样做:
public Calendar():this("meetingHolder", new MeetingRoom(), "status",
new DateTime(), new DateTime()) {
}
你必须提出合理的默认值。在这里,我只是放置虚拟占位符。
答案 2 :(得分:0)
这是因为你必须有一个没有任何参数的构造函数。创建一个没有参数的构造函数,并为您的属性指定默认值。
答案 3 :(得分:0)
那是因为你不能那样做。当您发布Web服务时,客户端将根据您的数据协定向您发送数据,.NET Framework将获取该数据并填充您的数据协定类(Calendar
类)使用您公开的属性。
首先,您的数据合同不应继承WebService
类。其次,只需提供默认的无参数构造函数,它就可以自行完成。