2

私の顧客の 1 人が、作成中のサービスに送信したい XML データを持っています。サンプル メッセージは次のようになります。

<SomeRootElement>
  <Dates>
    <Date>2012-05-20T00:00:00</Date>
    <Date>2012-05-21T00:00:00</Date>
  </Dates>
</SomeRootElement>

DataContract私の WCF サービス アプリケーションでは、対応する型が として定義されています。

[DataContract]
public class SomeRootElement {
    [DataMember]
    public ICollection<DateTime> Dates { get; set; }
}

問題は、この定義に基づいて、WCF がDatesコレクションを次のようにしたいことです。

<Dates>
  <dateTime>2012-05-20T00:00:00</dateTime>
  <dateTime>2012-05-21T00:00:00</dateTime>
</Dates>

配列項目のシリアル化された要素名に影響を与える方法はありますか? これは、以前は XML シリアライゼーション属性を使用して簡単に実行できましたが、DataContractSerializerはそれらを無視します。

4

1 に答える 1

3

これでうまくいくはずです:

[DataContract]
[KnownType(typeof(DateList))]
public class SomeRootElement {
    [DataMember]
    public ICollection<DateTime> Dates { get; set; }
}

[CollectionDataContract(ItemName="date")]
public class DateList : Collection<DateTime>  {}

カスタマイズされた ICollection の逆シリアル化に使用できる型をオーバーライドしています。

于 2012-05-20T14:13:46.877 に答える