DTO的自定义数组项名称

时间:2012-05-20 13:37:54

标签: c# xml wcf xml-serialization datacontractserializer

我的一个客户拥有他想要发送给我们正在创建的服务的XML数据。示例消息可能如下所示:

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

我的WCF服务应用程序上有一个定义为DataContract的相应类型:

[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忽略了这些属性。

1 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

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

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

您将覆盖它可用于反序列化自定义ICollection的类型。