代码之家  ›  专栏  ›  技术社区  ›  Fuzz

如何正确使用C语言中的SOAP WebService客户端#

  •  1
  • Fuzz  · 技术社区  · 7 年前

    我对C不熟悉,并且尝试使用SOAP Web服务,我生成了对WSDL的服务引用,并且能够执行以下操作来检索响应的数据集。

    SportingGatewaySoapClient myServices = new SportingGatewaySoapClient("GatewaySoapID");
    
    RSportResults sportsResults = myServices.SportResults("username","password");
    System.Data.DataSet dataSet = sportsResults.dsSportResults;
    

    如果我像通常那样迭代数据集,我就能够看到正确的信息:

    foreach (DataTable table in dataSet.Tables)
    {
        foreach (DataRow row in table.Rows)
        {
            foreach (object item in row.ItemArray)
            {
                Console.WriteLine(item);
            }
        }
    }
    

    但我无法理解如何将数据直接解包到生成的类中,以便按名称引用其属性。如:

     // some code here to convert response to a Sport object
     sport.getSportName()
    

    自动生成的reference.cs文件具有如下类:

    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.3056.0")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="https://endpointurl")]
    public partial class RSport : object, System.ComponentModel.INotifyPropertyChanged {
    
        private string sportName;
    

    我在这里错过了什么步骤?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Antoine V    7 年前

    DataSet RSport

    DataTable Reflection

    public static class DataTableExtensions
    {
        public static IList<T> ToList<T>(this DataTable table) where T : new()
        {
            IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();
            IList<T> result = new List<T>();
    
            foreach (var row in table.Rows)
            {
                var item = CreateItemFromRow<T>((DataRow)row, properties);
                result.Add(item);
            }
    
            return result;
        }
    
    
        private static T CreateItemFromRow<T>(DataRow row, IList<PropertyInfo> properties) where T : new()
        {
            T item = new T();
            foreach (var property in properties)
            {
                property.SetValue(item, row[property.Name], null);
            }
            return item;
        }
    }
    

    System.Data.DataSet dataSet = sportsResults.dsSportResults;
    var rs = dataSet.Tables[0].ToList<RSport>();