我有一个Web服务方法,需要一个类型为OnlinePaymentResponse的参数。此类型包含CustomData类型的属性,如下所示:
[Serializable]
public class OnlinePaymentResponse
{
public CustomData CustomData { get; set; }
}
CustomData类是这样的:
[XmlType(Namespace = XmlConstants.Namespace)]
public class CustomData
{
public CustomData()
{
this.Tables = new List<DynamicTable>();
}
[XmlElement("DynamicTable")]
public List<DynamicTable> Tables { get; set; }
.....
问题是,当我用svcutil.exe生成代理时,得到了CustomData类型,我得到了一个DynamicTable数组。
public partial class OnlinePaymentResponse
{
private DynamicTable[] customDataField;
..........
我一直在玩它,发现如果删除Tables属性的XmlElement属性,它将正确生成代理类:
public partial class OnlinePaymentResponse
{
private CustomData customDataField;
..........
我不明白为什么会这样。我一直在玩DataContract,DataMember,XmlRoot和其他属性,但我没有删除XmlElement属性就无法获得代理权限。我在这里缺少什么?
答案 0 :(得分:0)
Svcutil尝试生成一个不与.NET耦合的类。类型,因此数组是可用于其他平台的常见类型。
您可以使用CollectionDataContract属性创建一个(请参阅此处:CollectionDataContract attribute)并继承自List,它将生成一个不是数组的复合体。