2012-10-01 22 views
1

我有一個本地託管的WCF服務,我嘗試使用WCF的CollectionDataContract。WCF CollectionDataContract不使用ItemName

的服務合同看起來像這樣:

[OperationContract] 
GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request); 

的GetSalesDeliveryNotesResponse級有一個屬性序列號,其看起來像這樣:

[DataMember] 
public SerialList Serials { get; set; } 

的SerialList類是一個內部類的GetSalesDeliveryNotesResponse的和看起來像這樣:

[CollectionDataContract(ItemName = "Serial")] 
public class SerialList : List<string> { 
    public SerialList() : base() { } 

    public SerialList(List<string> l) : base() { 
     AddRange(l); 
    } 
} 

該代碼我用它來設置該屬性看起來是這樣的:

Serials = new GetSalesDeliveryNotesResponse.DeliveryNote.Order.Orderline.SerialList(
    (from s in r.Descendants("Serial") 
    select s.Value).ToList() 
) 

其中r是XElements的集合(服務連接到Oracle數據庫,執行存儲過程它返回我的服務有序列化到客戶端的XML )。

請注意,DeliveryNote,Order和Orderline也是Response對象的內部類,但爲簡潔起見(與其他一些屬性一樣)。

我遇到的問題是,在我的迴應(客戶端)的連續出版物對象看起來是這樣的:

<Serials> 
    <string>123789456</string> 
</Serials> 

的時候我希望它看起來像這樣:

<Serials> 
    <Serial>123789456</Serial> 
</Serials> 

我在這裏錯過了什麼?

//編輯: 一些更多的信息: 客戶端的服務實現了本作的SerialList類:

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] 
[System.Runtime.Serialization.CollectionDataContractAttribute(Name="GetSalesDeliveryNotesResponse.DeliveryNote.Order.Orderline.SerialList", Namespace="http://schemas.datacontract.org/2004/07/<my_namespace>/DeliveryNoteService.Contract.Response", ItemName="Serial")] 
[System.SerializableAttribute()] 
public class SerialList : System.Collections.Generic.List<string> { } 
+0

你確定你身邊沒有錯嗎?因爲我測試了這段代碼,並且我有正確的xml輸出。試用WCFTestClient。 – Cybermaxs

+0

@cybermaxs:現在我只是覺得很愚蠢...... WCFTestClient給出了正確的回答。謝謝你的提示! –

回答

0

顯然,我的服務是正確的。使用WCFTestClient給出了正確的響應。因此我的測試代碼出現了問題。

相關問題