2

我的一个客户有他想要发送到我们正在创建的服务的 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 回答