WCF の CollectionDataContract を使用しようとするローカルでホストされている WCF サービスがあります。
サービス契約は次のようになります。
[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 オブジェクトの内部クラスですが、簡潔にするために省略されていることに注意してください (他のいくつかのプロパティと同様)。
私が抱えている問題は、応答 (クライアント側) の 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> { }