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> { }
你確定你身邊沒有錯嗎?因爲我測試了這段代碼,並且我有正確的xml輸出。試用WCFTestClient。 – Cybermaxs
@cybermaxs:現在我只是覺得很愚蠢...... WCFTestClient給出了正確的回答。謝謝你的提示! –