WCF CollectionDataContract未使用ItemName
我有一个本地托管的WCF服务,我尝试使用WCF的CollectionDataContract 服务合同如下所示:WCF CollectionDataContract未使用ItemName,wcf,Wcf,我有一个本地托管的WCF服务,我尝试使用WCF的CollectionDataContract 服务合同如下所示: [OperationContract] GetSalesDeliveryNotesResponse GetSalesDeliveryNotes(GetSalesDeliveryNotesRequest request); [DataMember] public SerialList Serials { get; set; } [CollectionDataContract(Ite
[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给出了正确的响应。谢谢你的提示!