【问题标题】:Empty class return when calling REST Web Service调用 REST Web 服务时返回空类
【发布时间】:2012-02-22 01:04:57
【问题描述】:

我创建了一个 REST Web 服务,它在所有其他方面都按照我希望的方式工作。

我有一个包含联系人的主类,在该类中,我创建了另外 2 个类列表。 我的主要课程,其中一个列表来自通话,所有信息都完好无损。但是,第二堂课是空的。它包含列表中的每个项目,但每个列表项目都是空的。

网络服务功能

        [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;
        }

调用网络服务的代码

           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);

如下所示,我的 webservice 的类包含信息,但网页没有


如果有人有任何想法,请告诉我。我迷路了。这么简单的东西不应该这么坏。谢谢

【问题讨论】:

  • 您确定您的 DataContract (IQP_Contacts) 在客户端和服务器上都相同吗?
  • 是的,网络服务和网站在同一个地方并且引用了完全相同的类。此外,当仅在浏览器中使用 URI 调用函数以获取 XML 回复时,文件返回空。
  • 过去我遇到过类似的问题,当我通过 Visual Studio 进行调试时,我看到我的实体的值已填充,但在传递实体时,成员未填充。我认为在 Visual Studio 中检查属性的行为会触发实体获取其值(不确定这是否是正确的术语)。如果您在 Web 服务中放置一些仅访问属性的打印语句,您可能会发现返回的对象将填充其数据(也许)。
  • 这看起来很有趣。虽然只有班级有孩子才重要吗?在这种情况下,我没有使用儿童。只是 IQP_Contacts 类中的 Files 类的列表。

标签: c# web-services


【解决方案1】:

查看有关 DataContractSerializer 的文档,了解默认情况下会序列化和不序列化的内容: http://msdn.microsoft.com/en-us/library/cc656732.aspx

不看你的课很难说。但有可能您的Files 属性是只读的(只有get 访问器没有set)然后它不会被序列化。

这也可能取决于您是否在类上选择性地应用了[DataContract]/[DataMember] 属性。这会影响 DataContractSerializer 将序列化/反序列化的行为。您需要指出 IQP_RestWebService.Entitys.IQP_Contacts 类上的“文件”属性标记有 [DataMember] 属性,并且您在 IQP_RestWebService.Entitys.Files 类上具有 [DataContract]。

【讨论】:

  • 谢谢,当我创建类时,我必须明显忽略的 [datacontract] 和 [datamember] 属性。可能是我在它不起作用时没想到的一件事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2016-05-02
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多