代理 类 暴露了错误的类型

Proxy classes exposing the wrong type

我有一个需要 OnlinePaymentResponse 类型参数的 Web 服务方法。此类型包括一个 属性 类型的 CustomData,如下所示:

[Serializable]
public class OnlinePaymentResponse
{        
   public CustomData CustomData { get; set; }
}

CustomData class 是这样的:

[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;

    ..........

我一直在玩它,发现如果我删除表 属性 的 XmlElement 属性,它将正确生成代理 class:

public partial class OnlinePaymentResponse
{    
    private CustomData customDataField;

    ..........

我不明白为什么会这样。我一直在使用 DataContract、DataMember、XmlRoot 和其他属性,但如果不删除 XmlElement 属性,我就无法获得正确的代理。我在这里错过了什么?

Svcutil 尝试生成 class 不耦合到 .NET。类型,因此数组是可用于其他平台的通用类型。

您可以创建一个具有 CollectionDataContract 属性(更多信息参见此处:CollectionDataContract attribute)并继承自 List,它将生成一个不是数组的复合体。