如何在C#中调用网络服务
How to call web Services in C#
我正在调用 Web 服务并 return 进入列表,但我不能这样做。
我想用网络服务绑定下拉列表。
我添加了 INITIATORS_LIST class,其中包含我想在下拉列表中绑定的所有字段,例如公司、国家/地区、部门、位置...等等。我怎样才能实现我可以接受的任何替代方法?
样本JSON数据
{"Companies":[{"ACTIVE":true,"COMPANY_ID":1,"CompanyCode":"1000","CompanyName":"Almarai Company","CountryCode":"SAU","CountryName":"Saudi Arabia","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":6,"CompanyCode":"4000","CompanyName":"Almarai Co. Bahrain WLL","CountryCode":"BAH","CountryName":"Bahrain","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":8,"CompanyCode":"5000","CompanyName":"Bustan Al Khaleej Est.","CountryCode":"UAE","CountryName":"United Arab Emirates","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":11,"CompanyCode":"5200","CompanyName":"ALMARAI EMIRATES COMPANY L.L.C","CountryCode":"UAE","CountryName":"United Arab Emirates","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":15,"CompanyCode":"6000","CompanyName":"Al Kharafi Brothers","CountryCode":"KWT","CountryName":"Kuwait","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":18,"CompanyCode":"7000","CompanyName":"Arabian Planets Company","CountryCode":"OMN","CountryName":"Oman","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"}],"Countries":[{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":1,"CountryCode":"SAU","CountryName":"Saudi Arabia","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":3,"CountryCode":"UAE","CountryName":"United Arab Emirates","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":4,"CountryCode":"BAH","CountryName":"Bahrain","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":5,"CountryCode":"OMN","CountryName":"Oman","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":7,"CountryCode":"KWT","CountryName":"Kuwait","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"}],"Divisions":[{"ACTIVE":true,"CompanyCode":null,"CompanyName":null,"CountryCode":null,"CountryName":null,"DB_CONNECTION_STRING":null,"DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales","WEB_URL":null}],"Locations":
ALM_COUNTRY_M class:
public partial class ALM_COUNTRY_M : object, System.Runtime.Serialization.IExtensibleDataObject,
System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private bool COUNTRY_ACTIVEField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private int COUNTRY_M_IDField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string CountryCodeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string CountryNameField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string DivisionCodeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private int DivisionIdField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string DivisionNameField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public bool COUNTRY_ACTIVE {
get {
return this.COUNTRY_ACTIVEField;
}
set {
if ((this.COUNTRY_ACTIVEField.Equals(value) != true)) {
this.COUNTRY_ACTIVEField = value;
this.RaisePropertyChanged("COUNTRY_ACTIVE");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public int COUNTRY_M_ID {
get {
return this.COUNTRY_M_IDField;
}
set {
if ((this.COUNTRY_M_IDField.Equals(value) != true)) {
this.COUNTRY_M_IDField = value;
this.RaisePropertyChanged("COUNTRY_M_ID");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string CountryCode {
get {
return this.CountryCodeField;
}
set {
if ((object.ReferenceEquals(this.CountryCodeField, value) != true)) {
this.CountryCodeField = value;
this.RaisePropertyChanged("CountryCode");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string CountryName {
get {
return this.CountryNameField;
}
set {
if ((object.ReferenceEquals(this.CountryNameField, value) != true)) {
this.CountryNameField = value;
this.RaisePropertyChanged("CountryName");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string DivisionCode {
get {
return this.DivisionCodeField;
}
set {
if ((object.ReferenceEquals(this.DivisionCodeField, value) != true)) {
this.DivisionCodeField = value;
this.RaisePropertyChanged("DivisionCode");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public int DivisionId {
get {
return this.DivisionIdField;
}
set {
if ((this.DivisionIdField.Equals(value) != true)) {
this.DivisionIdField = value;
this.RaisePropertyChanged("DivisionId");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string DivisionName {
get {
return this.DivisionNameField;
}
set {
if ((object.ReferenceEquals(this.DivisionNameField, value) != true)) {
this.DivisionNameField = value;
this.RaisePropertyChanged("DivisionName");
}
}
}
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));
}
}
}
INITIATORS_LIST Class:
public partial class INITIATORS_LIST : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.ALM_COMPANY_M[] CompaniesField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.ALM_COUNTRY_M[] CountriesField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.ALM_DIVISION_M[] DivisionsField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.LOCATION[] LocationsField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.REGION[] RegionsField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.ALM_WKFLW_TYPE_M[] WorkflowTypesField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.ALM_COMPANY_M[] Companies {
get {
return this.CompaniesField;
}
set {
if ((object.ReferenceEquals(this.CompaniesField, value) != true)) {
this.CompaniesField = value;
this.RaisePropertyChanged("Companies");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.ALM_COUNTRY_M[] Countries {
get {
return this.CountriesField;
}
set {
if ((object.ReferenceEquals(this.CountriesField, value) != true)) {
this.CountriesField = value;
this.RaisePropertyChanged("Countries");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.ALM_DIVISION_M[] Divisions {
get {
return this.DivisionsField;
}
set {
if ((object.ReferenceEquals(this.DivisionsField, value) != true)) {
this.DivisionsField = value;
this.RaisePropertyChanged("Divisions");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.LOCATION[] Locations {
get {
return this.LocationsField;
}
set {
if ((object.ReferenceEquals(this.LocationsField, value) != true)) {
this.LocationsField = value;
this.RaisePropertyChanged("Locations");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.REGION[] Regions {
get {
return this.RegionsField;
}
set {
if ((object.ReferenceEquals(this.RegionsField, value) != true)) {
this.RegionsField = value;
this.RaisePropertyChanged("Regions");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.ALM_WKFLW_TYPE_M[] WorkflowTypes {
get {
return this.WorkflowTypesField;
}
set {
if ((object.ReferenceEquals(this.WorkflowTypesField, value) != true)) {
this.WorkflowTypesField = value;
this.RaisePropertyChanged("WorkflowTypes");
}
}
}
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));
}
}
}
参考:
public Almarai.GiveAway.GetInitiatorList.INITIATORS_LIST GetInitiatorsListByWorkflow(string userId, string WorkflowTypeCode) {
return base.Channel.GetInitiatorsListByWorkflow(userId, WorkflowTypeCode);
}
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IMasterDataService/GetInitiatorsListByWorkflow", ReplyAction="http://tempuri.org/IMasterDataService/GetInitiatorsListByWorkflowResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(Almarai.GiveAway.GetInitiatorList.CustomFaultException), Action="http://tempuri.org/IMasterDataService/GetInitiatorsListByWorkflowCustomFaultExcep" +
"tionFault", Name="CustomFaultException", Namespace="http://schemas.datacontract.org/2004/07/Almarai.Web.Services.MasterData")]
Almarai.GiveAway.GetInitiatorList.INITIATORS_LIST GetInitiatorsListByWorkflow(string userId, string WorkflowTypeCode);
国家class:(我是否应该为公司、国家、地区等每个不同的字段更改此class……等等)
public class CountryList
{
public CountryList(INITIATORS_LIST data)
{
ExtensionData = data;
}
public INITIATORS_LIST ExtensionData { get; internal set; }
}
我的方法:(我应该如何修改我的方法)
[WebMethod]
public static List<CountryList> GetCountriesName(string UserID)
{
GetInitiatorList.MasterDataServiceClient oClient = new GetInitiatorList.MasterDataServiceClient();
string userid = "approver01";
string work = "4";
List<CountryList> countries = oClient.GetInitiatorsListByWorkflow(userid, work); // Error on this line
foreach (Country c in countries)
{
lst.Add(c.Name);
}
return lst; //Error on this line
}
我无法添加到列表中还有其他方法吗?
我知道由于 return 类型我无法做到,但是
GetInitiatorsListByWorkflow 方法returns 一个 Almarai.GiveAway.GetInitiatorList.INITIATORS_LIST
对象,而不是 List<CountryList>
。同样,您的 GetCountriesName
方法 returns List<CountryList>
,而不是您的(代码中未定义的)lst
变量的类型。这就是为什么你有错误 - 你不能只是随机地将对象分配给错误类型的变量。
无论如何,对于您的国家/地区列表,您似乎实际上想要使用 ALM_COUNTRY_M
class 中的两个属性。 INITIATORS_LIST
包含该类型的对象数组。
所以你真正需要做的是从 GetInitiatorsListByWorkflow
方法返回的 INITIATORS_LIST
中获取 ALM_COUNTRY_M
对象的数组,并循环遍历它们,对于每个对象,创建 CountryList
的等效实例,使用 ALM_COUNTRY_M
对象中的值设置其属性,并将其添加到要返回的列表中。
像这样(未经测试):
[WebMethod]
public static List<CountryList> GetCountriesName(string UserID)
{
GetInitiatorList.MasterDataServiceClient oClient = new GetInitiatorList.MasterDataServiceClient();
string userid = "approver01";
string work = "4";
Almarai.GiveAway.GetInitiatorList.INITIATORS_LIST initiatorsList = oClient.GetInitiatorsListByWorkflow(userid, work); //get data from webservice
Almarai.GiveAway.GetInitiatorList.ALM_COUNTRY_M[] countryMList = initiatorsList.Countries; //get list of countries from the data returned by the webservice
List<CountryList> countries = new List<CountryList>(); //create an empty list which will be populated with data from the webservice
//loop through list of countries returned from webservice
foreach (Almarai.GiveAway.GetInitiatorList.ALM_COUNTRY_M country in countryMList)
{
//add new instance of CountryList using fields from the webservice class
countries.Add(new CountryList() {
CountryCode = country.CountryCode,
CountryName = country.CountryName
});
}
return countries; //return the completed list of countries
}
CountryList class 应该更像这样定义:
public class CountryList
{
public string CountryCode { get; set; }
public string CountryName { get; set; }
}
P.S。将 CountryList
class 重命名为 Country
会更有意义,因为每个对象只代表一个国家。它是定义列表的 List<>
部分。但这是一个单独的问题,由您决定。
我正在调用 Web 服务并 return 进入列表,但我不能这样做。 我想用网络服务绑定下拉列表。
我添加了 INITIATORS_LIST class,其中包含我想在下拉列表中绑定的所有字段,例如公司、国家/地区、部门、位置...等等。我怎样才能实现我可以接受的任何替代方法?
样本JSON数据
{"Companies":[{"ACTIVE":true,"COMPANY_ID":1,"CompanyCode":"1000","CompanyName":"Almarai Company","CountryCode":"SAU","CountryName":"Saudi Arabia","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":6,"CompanyCode":"4000","CompanyName":"Almarai Co. Bahrain WLL","CountryCode":"BAH","CountryName":"Bahrain","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":8,"CompanyCode":"5000","CompanyName":"Bustan Al Khaleej Est.","CountryCode":"UAE","CountryName":"United Arab Emirates","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":11,"CompanyCode":"5200","CompanyName":"ALMARAI EMIRATES COMPANY L.L.C","CountryCode":"UAE","CountryName":"United Arab Emirates","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":15,"CompanyCode":"6000","CompanyName":"Al Kharafi Brothers","CountryCode":"KWT","CountryName":"Kuwait","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"ACTIVE":true,"COMPANY_ID":18,"CompanyCode":"7000","CompanyName":"Arabian Planets Company","CountryCode":"OMN","CountryName":"Oman","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"}],"Countries":[{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":1,"CountryCode":"SAU","CountryName":"Saudi Arabia","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":3,"CountryCode":"UAE","CountryName":"United Arab Emirates","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":4,"CountryCode":"BAH","CountryName":"Bahrain","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":5,"CountryCode":"OMN","CountryName":"Oman","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"},{"COUNTRY_ACTIVE":true,"COUNTRY_M_ID":7,"CountryCode":"KWT","CountryName":"Kuwait","DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales"}],"Divisions":[{"ACTIVE":true,"CompanyCode":null,"CompanyName":null,"CountryCode":null,"CountryName":null,"DB_CONNECTION_STRING":null,"DivisionCode":"1000","DivisionId":1,"DivisionName":"Sales","WEB_URL":null}],"Locations":
ALM_COUNTRY_M class:
public partial class ALM_COUNTRY_M : object, System.Runtime.Serialization.IExtensibleDataObject,
System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private bool COUNTRY_ACTIVEField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private int COUNTRY_M_IDField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string CountryCodeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string CountryNameField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string DivisionCodeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private int DivisionIdField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string DivisionNameField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public bool COUNTRY_ACTIVE {
get {
return this.COUNTRY_ACTIVEField;
}
set {
if ((this.COUNTRY_ACTIVEField.Equals(value) != true)) {
this.COUNTRY_ACTIVEField = value;
this.RaisePropertyChanged("COUNTRY_ACTIVE");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public int COUNTRY_M_ID {
get {
return this.COUNTRY_M_IDField;
}
set {
if ((this.COUNTRY_M_IDField.Equals(value) != true)) {
this.COUNTRY_M_IDField = value;
this.RaisePropertyChanged("COUNTRY_M_ID");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string CountryCode {
get {
return this.CountryCodeField;
}
set {
if ((object.ReferenceEquals(this.CountryCodeField, value) != true)) {
this.CountryCodeField = value;
this.RaisePropertyChanged("CountryCode");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string CountryName {
get {
return this.CountryNameField;
}
set {
if ((object.ReferenceEquals(this.CountryNameField, value) != true)) {
this.CountryNameField = value;
this.RaisePropertyChanged("CountryName");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string DivisionCode {
get {
return this.DivisionCodeField;
}
set {
if ((object.ReferenceEquals(this.DivisionCodeField, value) != true)) {
this.DivisionCodeField = value;
this.RaisePropertyChanged("DivisionCode");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public int DivisionId {
get {
return this.DivisionIdField;
}
set {
if ((this.DivisionIdField.Equals(value) != true)) {
this.DivisionIdField = value;
this.RaisePropertyChanged("DivisionId");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string DivisionName {
get {
return this.DivisionNameField;
}
set {
if ((object.ReferenceEquals(this.DivisionNameField, value) != true)) {
this.DivisionNameField = value;
this.RaisePropertyChanged("DivisionName");
}
}
}
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));
}
}
}
INITIATORS_LIST Class:
public partial class INITIATORS_LIST : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.ALM_COMPANY_M[] CompaniesField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.ALM_COUNTRY_M[] CountriesField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.ALM_DIVISION_M[] DivisionsField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.LOCATION[] LocationsField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.REGION[] RegionsField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private Almarai.GiveAway.GetInitiatorList.ALM_WKFLW_TYPE_M[] WorkflowTypesField;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.ALM_COMPANY_M[] Companies {
get {
return this.CompaniesField;
}
set {
if ((object.ReferenceEquals(this.CompaniesField, value) != true)) {
this.CompaniesField = value;
this.RaisePropertyChanged("Companies");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.ALM_COUNTRY_M[] Countries {
get {
return this.CountriesField;
}
set {
if ((object.ReferenceEquals(this.CountriesField, value) != true)) {
this.CountriesField = value;
this.RaisePropertyChanged("Countries");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.ALM_DIVISION_M[] Divisions {
get {
return this.DivisionsField;
}
set {
if ((object.ReferenceEquals(this.DivisionsField, value) != true)) {
this.DivisionsField = value;
this.RaisePropertyChanged("Divisions");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.LOCATION[] Locations {
get {
return this.LocationsField;
}
set {
if ((object.ReferenceEquals(this.LocationsField, value) != true)) {
this.LocationsField = value;
this.RaisePropertyChanged("Locations");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.REGION[] Regions {
get {
return this.RegionsField;
}
set {
if ((object.ReferenceEquals(this.RegionsField, value) != true)) {
this.RegionsField = value;
this.RaisePropertyChanged("Regions");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public Almarai.GiveAway.GetInitiatorList.ALM_WKFLW_TYPE_M[] WorkflowTypes {
get {
return this.WorkflowTypesField;
}
set {
if ((object.ReferenceEquals(this.WorkflowTypesField, value) != true)) {
this.WorkflowTypesField = value;
this.RaisePropertyChanged("WorkflowTypes");
}
}
}
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));
}
}
}
参考:
public Almarai.GiveAway.GetInitiatorList.INITIATORS_LIST GetInitiatorsListByWorkflow(string userId, string WorkflowTypeCode) {
return base.Channel.GetInitiatorsListByWorkflow(userId, WorkflowTypeCode);
}
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IMasterDataService/GetInitiatorsListByWorkflow", ReplyAction="http://tempuri.org/IMasterDataService/GetInitiatorsListByWorkflowResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(Almarai.GiveAway.GetInitiatorList.CustomFaultException), Action="http://tempuri.org/IMasterDataService/GetInitiatorsListByWorkflowCustomFaultExcep" +
"tionFault", Name="CustomFaultException", Namespace="http://schemas.datacontract.org/2004/07/Almarai.Web.Services.MasterData")]
Almarai.GiveAway.GetInitiatorList.INITIATORS_LIST GetInitiatorsListByWorkflow(string userId, string WorkflowTypeCode);
国家class:(我是否应该为公司、国家、地区等每个不同的字段更改此class……等等)
public class CountryList
{
public CountryList(INITIATORS_LIST data)
{
ExtensionData = data;
}
public INITIATORS_LIST ExtensionData { get; internal set; }
}
我的方法:(我应该如何修改我的方法)
[WebMethod]
public static List<CountryList> GetCountriesName(string UserID)
{
GetInitiatorList.MasterDataServiceClient oClient = new GetInitiatorList.MasterDataServiceClient();
string userid = "approver01";
string work = "4";
List<CountryList> countries = oClient.GetInitiatorsListByWorkflow(userid, work); // Error on this line
foreach (Country c in countries)
{
lst.Add(c.Name);
}
return lst; //Error on this line
}
我无法添加到列表中还有其他方法吗? 我知道由于 return 类型我无法做到,但是
GetInitiatorsListByWorkflow 方法returns 一个 Almarai.GiveAway.GetInitiatorList.INITIATORS_LIST
对象,而不是 List<CountryList>
。同样,您的 GetCountriesName
方法 returns List<CountryList>
,而不是您的(代码中未定义的)lst
变量的类型。这就是为什么你有错误 - 你不能只是随机地将对象分配给错误类型的变量。
无论如何,对于您的国家/地区列表,您似乎实际上想要使用 ALM_COUNTRY_M
class 中的两个属性。 INITIATORS_LIST
包含该类型的对象数组。
所以你真正需要做的是从 GetInitiatorsListByWorkflow
方法返回的 INITIATORS_LIST
中获取 ALM_COUNTRY_M
对象的数组,并循环遍历它们,对于每个对象,创建 CountryList
的等效实例,使用 ALM_COUNTRY_M
对象中的值设置其属性,并将其添加到要返回的列表中。
像这样(未经测试):
[WebMethod]
public static List<CountryList> GetCountriesName(string UserID)
{
GetInitiatorList.MasterDataServiceClient oClient = new GetInitiatorList.MasterDataServiceClient();
string userid = "approver01";
string work = "4";
Almarai.GiveAway.GetInitiatorList.INITIATORS_LIST initiatorsList = oClient.GetInitiatorsListByWorkflow(userid, work); //get data from webservice
Almarai.GiveAway.GetInitiatorList.ALM_COUNTRY_M[] countryMList = initiatorsList.Countries; //get list of countries from the data returned by the webservice
List<CountryList> countries = new List<CountryList>(); //create an empty list which will be populated with data from the webservice
//loop through list of countries returned from webservice
foreach (Almarai.GiveAway.GetInitiatorList.ALM_COUNTRY_M country in countryMList)
{
//add new instance of CountryList using fields from the webservice class
countries.Add(new CountryList() {
CountryCode = country.CountryCode,
CountryName = country.CountryName
});
}
return countries; //return the completed list of countries
}
CountryList class 应该更像这样定义:
public class CountryList
{
public string CountryCode { get; set; }
public string CountryName { get; set; }
}
P.S。将 CountryList
class 重命名为 Country
会更有意义,因为每个对象只代表一个国家。它是定义列表的 List<>
部分。但这是一个单独的问题,由您决定。