2012-02-22 98 views
0

我創建了REST Web服務,在其他所有方式下,我都希望它能夠工作。調用REST Web服務時返回空類返回

我有一個包含聯繫人的主類,在那個類中,還有其他2個我創建的類的列表。 我的主要課程和其中一個列表通過電話會議,並保留所有信息。然而,第二課堂是空着的。它包含列表中的每個項目,但每個列表項都是空的。

的Web服務功能

 [OperationContract] 
     [WebGet(UriTemplate = "/Login/{IQPid}/{Password}")] 
     public IQP_Contacts Login(string IQPid, string password) 
     { 
      int iqpID = 0; 
      try 
      { 
       iqpID = int.Parse(IQPid); 
      } 
      catch { return null; } 
      IQP_Contacts contact = this.Repository.Contacts.Find(delegate(IQP_Contacts c) { return c.IqpID == iqpID; }); 
      if (contact.Password == password) 
      { 
       return contact; 
      } 
      else return null; 
     } 

代碼調用Web服務

  WebClient proxy = new WebClient(); 
      byte[] abc = proxy.DownloadData((new Uri("http://localhost:53468/IQP_Service.svc/Login/" + ID + "/" + password))); 

      Stream strm = new MemoryStream(abc); 
      DataContractSerializer obj = new DataContractSerializer(typeof(IQP_Contacts)); 
      IQP_Contacts contact = (IQP_Contacts)obj.ReadObject(strm); 

正如你可以看到下面,我的web服務的類所包含的信息,但該網頁不

Web Service

Website


如果有人有任何想法,請讓我知道。我迷失在這一個。這個簡單的東西不應該被破壞。由於

+0

您確定您的DataContract(IQP_Contacts)在客戶端和服務器上都相同嗎? – 2012-02-22 01:11:54

+0

是的,web服務和網站是在同一個地方,並引用完全相同的類。另外,在瀏覽器中使用URI調用函數以獲取XML回覆時,文件將返回空白。 – Seige 2012-02-22 01:15:26

+0

我曾經有一個類似的問題,當我通過visual studio進行調試時,我看到我的實體的值已經填充,但是當傳遞實體時,這些成員未被填充。我認爲**在Visual Studio中檢查屬性的行爲會觸發實體獲取其值(不確定這是否是正確的術語)。如果您要在您的Web服務中放入一些簡單訪問屬性的打印語句,您可能會發現返回的對象將會填充(也許)其數據。 – Tung 2012-02-22 01:41:02

回答

3

退房有關DataContractSerializer的文檔,看看有什麼不和沒有得到默認連載: http://msdn.microsoft.com/en-us/library/cc656732.aspx

這是很難說沒有看到你的類。但有可能你的Files屬性是隻讀的(只有一個get訪問者沒有set),那麼它不會被序列化。

也可能取決於您是否有選擇性地在您的課程中應用[DataContract]/[DataMember]屬性。這會影響DataContractSerializer將序列化/反序列化的行爲。您需要指出IQP_RestWebService.Entitys.IQP_Contacts類上的「Files」屬性標有[DataMember]屬性,並且IQP_RestWebService.Entitys.Files類上有[DataContract]。

+0

謝謝,當我創建該類時,我必須明顯忽略[datacontract]和[datamember]屬性。可能是我沒有想到在無效時看到的一件事。 – Seige 2012-02-22 02:03:02