【问题标题】:Deserialization Error while returning the Object from WCF Service从 WCF 服务返回对象时出现反序列化错误
【发布时间】:2012-05-01 04:20:09
【问题描述】:

我在返回 Activity 对象数组时遇到如下所示的错误。无法理解哪里出了问题。谁能帮我解决这个问题。

这是错误

命名空间中的结束元素“ActivityTypeId” 'http://schemas.datacontract.org/2004/07/BusinessEntities' 预期。 从命名空间中找到元素 'a:Code' 'http://schemas.datacontract.org/2004/07/BusinessEntities'。 1号线, 位置 450。

UI相关代码:

  protected void Page_Load(object sender, EventArgs e)
    {
        TimeSheetManagementServiceClient serviceClient = new TimeSheetManagementServiceClient("WSHttpBinding_ITimeSheetManagementService");
        Activity[] activities=serviceClient.GetActivities();
        GridView1.DataSource = activities;
        GridView1.DataBind();

    }

WCF服务代码

 public class TimeSheetManagementService:ITimeSheetManagementService 
    {
        public BusinessEntities.Activity[] GetActivities()
        {
            TimeSheetManagementDataController controller= new TimeSheetManagementDataController();
            var activities = controller.GetActivities().Select(activity => new BusinessEntities.Activity()
                                                                               {
                                                                                   Code = activity.Code,
                                                                                   Description = activity.Description,
                                                                                   Status =
                                                                                       (EntityStatus)
                                                                                       Enum.Parse(typeof(EntityStatus), ((activity.Status==true) ? 0 : 1).ToString()),
                                                                                   ActivityTypeId = new BusinessEntities.ActivityType()
                                                                                                        {
                                                                                                          Code=activity.ActivityType.Code,
                                                                                                          Description = activity.ActivityType.Description,
                                                                                                          Name = activity.ActivityType.Name
                                                                                                        }


                                                                               });
            return activities.ToArray();
        }

    }

服务合同

  [ServiceContract]
    interface ITimeSheetManagementService
    {
        [OperationContract]
        Activity[] GetActivities();
    }

数据合同

[DataContract]
public class Activity
{
    [DataMember]
    public string Code { get; set; }
    [DataMember]
    public string Description { get; set; }
    [DataMember]
    public EntityStatus Status { get; set; }
    [DataMember]
    public ActivityType  ActivityTypeId { get; set; }
}
[DataContract]
public enum EntityStatus
{
    [EnumMember]
    Active=0,
    [EnumMember]
    Inactive=1
}

[DataContract]
public class ActivityType
{
    [DataMember]
    public string Code { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Description { get; set; }


}

【问题讨论】:

  • 我如何找到解决此问题的方法,GetActivities 方法的返回类型更改为 List,而不是返回数组,而是返回列表。进行此更改后,此代码按预期工作。但不确定问题的原因。如果有人对此行为有任何想法,请告诉我。
  • 请将您的解决方案添加为答案并将其标记为已接受,以便其他人知道该问题已解决。

标签: wcf


【解决方案1】:

我不确定,但我认为问题在于 Activity 类的数据成员的字母顺序。只是为了测试,考虑在 Datamember 属性中指定 order 属性。 http://msdn.microsoft.com/en-us/library/ms729813%28v=vs.90%29.aspx

希望这会有所帮助

【讨论】:

  • 我觉得和ActivityTypeId有些关系,当这个属性是字符串或Guid时它起作用了。但是当我把它改成一门课时,这个问题就开始了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 2011-07-29
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多