1

我有一个本地托管的 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> { }
4

1 回答 1

0

显然我的服务是正确的。使用 WCFTestClient 给出了正确的响应。因此,我自己的测试代码存在问题。

于 2012-10-01T08:32:51.490 回答