Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF CollectionDataContract未使用ItemName_Wcf - Fatal编程技术网

WCF CollectionDataContract未使用ItemName

WCF CollectionDataContract未使用ItemName,wcf,Wcf,我有一个本地托管的WCF服务,我尝试使用WCF的CollectionDataContract 服务合同如下所示: [OperationContract] GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request); [DataMember] public SerialList Serials { get; set; } [CollectionDataContract(Ite

我有一个本地托管的WCF服务,我尝试使用WCF的CollectionDataContract

服务合同如下所示:

[OperationContract]
GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request);
[DataMember]
public SerialList Serials { get; set; }
[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()
)
<Serials>
    <string>123789456</string>
</Serials>
<Serials>
    <Serial>123789456</Serial>
</Serials>
GetSalesDeliveryNotesResponse类有一个属性Serials,如下所示:

[OperationContract]
GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request);
[DataMember]
public SerialList Serials { get; set; }
[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()
)
<Serials>
    <string>123789456</string>
</Serials>
<Serials>
    <Serial>123789456</Serial>
</Serials>
SerialList类是GetSalesDeliveryNotesResponse的内部类,如下所示:

[OperationContract]
GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request);
[DataMember]
public SerialList Serials { get; set; }
[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()
)
<Serials>
    <string>123789456</string>
</Serials>
<Serials>
    <Serial>123789456</Serial>
</Serials>
其中r是服务连接到Oracle数据库的元素的集合,执行一个存储过程,该存储过程返回一个XML,我的服务必须将该XML序列化到客户端

请注意,DeliveryNote、Order和Orderline也是Response对象的内部类,但为了简洁起见,它们被省略了,还有一些其他属性

我遇到的问题是,我的响应客户端中的Serials对象如下所示:

[OperationContract]
GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request);
[DataMember]
public SerialList Serials { get; set; }
[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()
)
<Serials>
    <string>123789456</string>
</Serials>
<Serials>
    <Serial>123789456</Serial>
</Serials>
当我期望它看起来像这样时:

[OperationContract]
GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request);
[DataMember]
public SerialList Serials { get; set; }
[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()
)
<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> { }

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

您确定您这边没有问题吗?因为我已经测试了这段代码,并且得到了正确的xml输出。试试WCFTestClient。@cybermaxs:现在我觉得自己很愚蠢。。。WCFTestClient给出了正确的响应。谢谢你的提示!