我有一个本地托管的 WCF 服务,我尝试使用 WCF 的 CollectionDataContract。
服务合同如下所示:
[OperationContract]
GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request);
GetSalesDeliveryNotesResponse 类有一个属性 Serials,如下所示:
[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-object 的内部类,但为简洁起见被省略(与其他几个属性一样)。
我遇到的问题是我的响应(客户端)中的 Serials 对象如下所示:
<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> { }