2012-02-22 71 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