2012-04-30 73 views
1

我在返回Activity對象數組時遇到下面顯示的錯誤。無法理解事情會出錯的地方。可以幫助我解決這個問題。從WCF服務返回對象時的反序列化錯誤

以下是錯誤

結束元素從命名空間 'ActivityTypeId' 'http://schemas.datacontract.org/2004/07/BusinessEntities' 預期。 從命名空間 'http://schemas.datacontract.org/2004/07/BusinessEntities'發現元素'a:代碼'。行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(); 

    } 

WCFService代碼

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


} 
+0

有些我是如何找到解決這個問題,返回GetActivities方法的類型改爲列出和,而不是返回數組,我returing名單。做這個改變後,這段代碼按預期工作。但不知道問題的原因。如果有人對此行爲有任何想法,請告訴我。 – sameer

+0

請將您的解決方案作爲答案添加,並將其標記爲已接受,以便其他人知道已解決此問題。 – lockstock

回答

0

我不確定,但我認爲問題是您的Activity類的數據庫的字母順序。只是爲了測試,請考慮在Datamember屬性中指定order屬性。 http://msdn.microsoft.com/en-us/library/ms729813%28v=vs.90%29.aspx

希望這將有助於

+0

感謝您的回覆, – sameer

+0

我感覺與ActivityTypeId有關,它在此屬性是字符串或Guid時起作用。但是當我將它改爲一個類時,這個問題就開始了。 – sameer