如何在 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&lt;string&gt; 设置为List&lt;CountryList&gt;

要么更改函数声明:

public static List<string> GetCountriesName(string UserID)

或者你改变返回值:

return oClient.GetInitiatorsListByWorkflow(userid, work);

假设您要返回List&lt;string&gt;,您可能需要选择要返回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=&gt;c.Name).ToList(); @PanagiotisKanavos 如果它正在使用 LINQ,是的,但它在问题或标签中都没有说明 LINQ。 但同样的错误来了 @AndrésMarotta LINQ 只是一个命名空间,而不是一个数据访问库。 Enumerable.ToList() 在一行中完成了这个循环所做的事情,但没有为列表提供更广泛的范围或允许它以部分构造的形式存在。 @NitishKumarPatel 如果您更改返回类型,您将永远不会遇到相同的错误。这就是问题代码中的问题。它试图返回错误的东西。您还没有解释问题本身什么是正确的。名单?还是对象列表?

以上是关于如何在 C# 中将 Web 服务商店调用到列表中 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# EF 核心 web api 中将列表转换为 Json

如何在c#中将数据添加到集合列表中[重复]

如何在c# web中将字符串存储到数组中

为 Windows 商店应用程序打开 Web 服务?

如何序列化为c#代码?

在 Android 中将 ksoap 对象绑定到 ArrayList 时遇到问题