2012-01-30 33 views
1

我試着去的構造函數添加到我的web服務,看起來像這樣:添加一個構造器的Web服務C#

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 cannot be serialized because it does not have a default public constructor

回答

4

在編寫可序列化的對象時,必須提供一個沒有para的構造函數米(一默認構造函數):

public Calendar() 

的原因是,當物體被反序列化,解串器必須具有創建對象的實例的默認方式。

+0

我試着添加一個空的構造函數。但現在即時獲取此錯誤要成爲XML可序列化,從ICollection繼承的類型必須在其繼承層次結構的所有級別都有一個Add(System.Object)實現。 System.Web.HttpApplicationState不實現添加(System.Object)。 – mortenstarck 2012-01-30 13:06:24

3

該要求必須得到滿足,並且一旦添加了一個構造函數以接受參數,編譯器就不會再爲您生成默認的無參數構造函數。你可以這樣做:

public Calendar() { 
} 

但是那麼你的成員變量將不會被初始化。如果你有他們想使用的默認值,你也可以這樣做:

public Calendar():this("meetingHolder", new MeetingRoom(), "status", 
         new DateTime(), new DateTime()) { 
} 

而你必須拿出合理的默認值。在這裏,我只是放置了虛擬的佔位符。

0

這是因爲你必須有一個沒有任何參數的構造函數。創建一個沒有參數的構造函數並將默認值分配給您的屬性。

0

那是因爲你根本無法這樣做。當您發佈Web服務時,客戶端將根據您的數據合同向您發送數據,.NET Framework將採用該數據並使用您公開的屬性填充數據合同類Calendar類)

首先,您的數據合同不應該繼承WebService類。其次,只需提供默認的無參數構造函數,它就會自行解決。