嵌套数组的 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];
我必须以复杂的数据结构作为参数调用第三方 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];