2012-08-14 80 views
3

我正在開發的Windows Mobile,因此必須使用Web服務,而不是通過WCF枚舉。我有我通過網絡服務的正常工作,除了因爲這是一個枚舉一個屬性傳遞的業務對象。無論客戶端設置了什麼值,該值始終作爲默認值出現在服務器上。很迷茫:(不能.NET 2.0中的Web服務

這裏的服務器上定義的業務對象的代碼:

public enum TaskTypeEnum { GoodsReceipt, ImportCosting }; 

[Serializable, DataContractAttribute] 
public class TaskContainer 
{ 
    [DataMemberAttribute] 
    public TaskTypeEnum TaskType { get; set; }  
... 

及這裏的設置該屬性在客戶端上的代碼:

var container = new TaskContainer(); 
container.TaskType = TaskTypeEnum.ImportCosting; 
service.Save(container); 

對於一些未知的原因當這個「容器」對象獲取到服務器時,任務類型屬性始終設置爲GoodsReceipt不管我把它設置在客戶端上。

感謝您的幫助。

回答

6

你需要確保你的枚舉也有一個DataContract,否則也不會被序列化,每個成員都必須擁有的屬性EnumMember

[DataContract] 
public enum TaskTypeEnum 
{ 
    [EnumMember] 
    GoodsReceipt, 

    [EnumMember] 
    ImportCosting 
} 

另見:http://msdn.microsoft.com/en-us/library/aa347875.aspx

+1

感謝堆建議Arcturus。不幸的是,血腥的事情仍然沒有奏效。我真的不知道爲什麼。我有一個我用來運行Web服務的單元測試項目。我已將該服務添加爲「Web引用」,而不是「服務參考」。不知道這是否重要。 – 2012-08-14 10:29:16

+0

如果您添加的屬性,請確保您更新服務引用。它不會自動執行。 – Arcturus 2012-08-14 13:23:31

+0

馬克,你在開發Windows 7的手機嗎? [DataContractAttribute](http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datacontractattribute.aspx)功能看起來不像Window Mobile(.NET Framework 3.0之前)可用的功能, 。 – jp2code 2012-08-14 20:27:55

0

我有一個類似的問題。在原始類型的代理類字段(即不可空字段)中有第二個稱爲Specified的字段。

也許在你的情況TaskContainer有一個名爲TaskTypeSpecified場。嘗試設置

container.TaskTypeSpecified = true;