嵌套数组的 wcf 引用由于其保护级别而无法访问

wcf reference with nested arrays inaccessible due to its protection level

我必须以复杂的数据结构作为参数调用第三方 Wcf 服务的方法。在 VS2012 中,我引用了 Wsdl。 Reference.cs 是自动生成的。该参数是一个大结构,并且有一些自定义元素的嵌套数组。以下是 Reference.cs

的部分代码
    private ProcessTableMachinery[] processDataTableMachineryField;

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute(Order=27)]
    [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]
    public ProcessTableMachinery[] ProcessDataTableMachinery {
        get {
            return this.processDataTableMachineryField;
        }
        set {
            this.processDataTableMachineryField = value;
            this.RaisePropertyChanged("ProcessDataTableMachinery");
        }
    }

ProcessTableMachinery 是一个 class,它包含另一个数组,如下所示。

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18408")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://blue-group.it/")]
public partial class ProcessTableMachinery : object, System.ComponentModel.INotifyPropertyChanged {

    private SingleDataMachinery[] dataTableValuesField;

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayAttribute(Order=7)]
    [System.Xml.Serialization.XmlArrayItemAttribute(IsNullable=false)]
    public SingleDataMachinery[] DataTableValues {
        get {
            return this.dataTableValuesField;
        }
        set {
            this.dataTableValuesField = value;
            this.RaisePropertyChanged("DataTableValues");
        }
    }


    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged(string propertyName) {
        System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
        if ((propertyChanged != null)) {
            propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }
}

我必须使用以下数据初始化 dataTableValuesField。

objRetTable.ProcessDataTableMachinery[iIndex].dataTableValuesField = new RemoteWebService.SingleDataMachinery[1];

我收到错误 ProcessTableMachinery.dataTableValuesField 由于其保护级别而无法访问。我正在寻找解决方法。如果我将 dataTableValuesField 更改为 public 到 reference.cs,我会收到运行时反射错误。我应该修改 Wsdl 还是自动生成的 class?

当从 Wsdl 生成字段时,它会生成一个 public 属性(getter 和 setter)和一个私有字段。您必须使用 public 属性 (DataTableValues) 而不是字段 (dataTableValuesField):

objRetTable.ProcessDataTableMachinery[iIndex].DataTableValues = new RemoteWebService.SingleDataMachinery[1];