WCF CollectionDataContract不使用ItemName

时间:2012-10-01 06:54:44

标签: wcf

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

1 个答案:

答案 0 :(得分:0)

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