我有一个本地托管的WCF服务,我尝试使用WCF的CollectionDataContract。
服务合同如下:
[OperationContract]
GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request);
GetSalesDeliveryNotesResponse-class有一个属性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-object(客户端)看起来像这样:
<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 :(得分:0)
显然我的服务是正确的。使用WCFTestClient给出了正确的响应。因此我的测试代码存在问题。