【问题标题】:Send a list with appointments through WCF通过 WCF 发送包含约会的列表
【发布时间】:2012-03-29 13:35:16
【问题描述】:

我想通过 WCF 发送Appointments 的列表。我的界面如下所示:

[ServiceContract]
    public interface IServices
    {
        [OperationContract]
        string addAppointments(List<Appointment> appointmentList);
    }

如果我调用我的 WCF 服务,我总是会收到以下错误:

类型“Microsoft.Exchange.WebServices.Data.Appointment”不能 序列化。考虑用 DataContractAttribute 标记它 属性,并标记您想要序列化的所有成员 DataMemberAttribute 属性。请参阅 Microsoft .NET 框架 其他受支持类型的文档。

我的服务目前如下所示:

class Service : IServices 
    {
        public string addAppointments(List<Appointment> appointmentList)
        {
            foreach (Appointment app in appointmentList)
            {
                Console.WriteLine(app.Organizer.Name);
            }
            return "true";
        }
    }

【问题讨论】:

  • 看起来Microsoft.Exchange.WebServices.Data.Appointment 是你从其他地方得到的一个类,它不打算被序列化。

标签: wcf exchangewebservices generic-list appointment


【解决方案1】:

不是你的服务有问题,而是你通过的课程,约会。 首先将 [DataContract] 添加到您的课程中。然后 [DataMember] 到您想要传递的每个属性。

例如,如果您开始:

public class Appointment{
    public DateTime Date { get; set; }
    public string Name { get; set; }
}

您可以通过添加这些属性使其由 WCF 的 DataContractSerializer 序列化:

[DataContract]    
public class Appointment{
    [DataMember]
    public DateTime Date { get; set; }

    [DataMember]
    public string Name { get; set; }
}

【讨论】:

  • 在哪个 dll 中可以找到 DataContract?我尝试使用“使用 System.Runtime.Serialization”,但它对我不起作用
  • 如果 OP 在 Entity 上没有任何 [DataContract] 属性,它将采用默认方法并序列化所有公共属性。根据@Jesse Slicer,该实体似乎不是 POCO 并且无法序列化。 msdn.microsoft.com/en-us/library/ms733127.aspx
猜你喜欢
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
相关资源
最近更新 更多