如何在 C# 中将 Web 服务商店调用到列表中 [关闭]
Posted
技术标签:
【中文标题】如何在 C# 中将 Web 服务商店调用到列表中 [关闭]【英文标题】:How to call web Services store into list In C# [closed] 【发布时间】:2021-01-04 04:00:42 【问题描述】:我必须使用服务绑定下拉列表,为此我从 .cs 调用服务并使用 AJAX 调用我将整理此方法并绑定下拉列表。
但我无法将其添加到服务中。收到错误Can not implicitly convert 'Seystem.Collections.Generic.List<string>' to 'Seystem.Collections.Generic.List<MyprojectName.Header.CountryList>
我需要做什么。
public Almarai.GiveAway.GetInitiatorList.INITIATORS_LIST GetInitiatorsListByWorkflow(string userId, string WorkflowTypeCode)
return base.Channel.GetInitiatorsListByWorkflow(userId, WorkflowTypeCode);
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="ALM_COUNTRY_M", Namespace="http://schemas.datacontract.org/2004/07/Almarai.Web.Services.DataEntities")]
[System.SerializableAttribute()]
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.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 static List<CountryList> GetCountriesName(string UserID)
GetInitiatorList.MasterDataServiceClient oClient = new GetInitiatorList.MasterDataServiceClient();
string userid = "approver01";
string work = "4";
oClient.GetInitiatorsListByWorkflow(userid, work).ToString();
List<CountryList> lst = new List<CountryList>();
lst.Add(oClient.GetInitiatorsListByWorkflow(userid, work));
return lst;
现在我已经将字符串更改为对象类型,但我仍然收到错误
public class CountryList
public INITIATORS_LIST ExtensionData get; internal set;
我已经添加了启动器类,我正在寻找这些文件以绑定下拉列表,任何人都可以帮助我做同样的事情
请看屏幕截图
【问题讨论】:
评论不用于扩展讨论;这个对话是moved to chat。 【参考方案1】:在您的 cmets 中明确返回类型后:
您正在尝试将INITIATORS_LIST
类型的对象添加到CountryList
类型的列表中。要解决此问题,您必须添加 CountryList
类型的对象:
var countryList = new CountryList
ExtensionData = oClient.GetInitiatorsListByWorkflow(userid, work)
;
lst.Add(countryList);
代替:
lst.Add(oClient.GetInitiatorsListByWorkflow(userid, work));
根据您的项目结构,您可能需要删除 CountryList
类中 ExtensionData
属性的 set
上的 internal
修饰符。如果这不是一个选项,您可以将构造函数添加到 CountryList
类,该类将 INITIATORS_LIST
作为参数:
public class CountryList
public CountryList(INITIATORS_LIST data)
ExtensionData = data;
public INITIATORS_LIST ExtensionData get; internal set;
【讨论】:
唯一缺少的是Name
属性,但由于 OP 不愿意提供更多信息,希望这个答案就足够了。
@John 我按照你的建议更新了我的代码,但仍然遇到错误,请帮助我
@croxy 请查看我收到错误的屏幕截图
@croxy 我无法解决此问题请查找我的更新代码
@NitishKumarPatel 请避免发布错误截图或代码 sn-ps。始终将它们作为文本发布。这将使我们能够快速复制它们。第一个错误是因为您没有返回任何在最后添加 return lst;
的内容将解决此问题。对于第二个错误,您需要告诉我错误的含义。【参考方案2】:
错误很明显,您不能将List<string>
设置为List<CountryList>
。
要么更改函数声明:
public static List<string> GetCountriesName(string UserID)
或者你改变返回值:
return oClient.GetInitiatorsListByWorkflow(userid, work);
假设您要返回List<string>
,您可能需要选择要返回CountryList
的哪个属性,然后将其添加到列表中:
public static List<CountryList> GetCountriesName(string UserID)
GetInitiatorList.MasterDataServiceClient oClient = new GetInitiatorList.MasterDataServiceClient();
string userid = "approver01";
string work = "4";
List<string> lst = new List<string>();
List<CountryList> countries = oClient.GetInitiatorsListByWorkflow(userid, work);
foreach (Country c in countries)
lst.Add(c.Name);
return lst;
【讨论】:
你可以使用var lst=countries.Select(c=>c.Name).ToList();
@PanagiotisKanavos 如果它正在使用 LINQ,是的,但它在问题或标签中都没有说明 LINQ。
但同样的错误来了
@AndrésMarotta LINQ 只是一个命名空间,而不是一个数据访问库。 Enumerable.ToList()
在一行中完成了这个循环所做的事情,但没有为列表提供更广泛的范围或允许它以部分构造的形式存在。
@NitishKumarPatel 如果您更改返回类型,您将永远不会遇到相同的错误。这就是问题代码中的问题。它试图返回错误的东西。您还没有解释问题本身什么是正确的。名单?还是对象列表?以上是关于如何在 C# 中将 Web 服务商店调用到列表中 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章