Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于清单的澄清<;T>;和WCF_C#_Wcf_Generics - Fatal编程技术网

C# 关于清单的澄清<;T>;和WCF

C# 关于清单的澄清<;T>;和WCF,c#,wcf,generics,C#,Wcf,Generics,我是WCF的新手,我想澄清一下。我试图从我的WCF返回一个列表,但在尝试使用它时出错。无法将T[]转换为列表的类型。下面是示例 问题:这是因为WCF可以被多种技术使用并转换为一个阵列吗 接口: [ServiceContract] public interface I_UI_Service { [OperationContract] List<Site> Get_Sites(string ntid); } [DataContract] [Serializable] p

我是WCF的新手,我想澄清一下。我试图从我的WCF返回一个
列表
,但在尝试使用它时出错。无法将
T[]
转换为
列表的类型。下面是示例

问题:这是因为WCF可以被多种技术使用并转换为一个阵列吗

接口:

[ServiceContract]
public interface I_UI_Service
{
    [OperationContract]
    List<Site> Get_Sites(string ntid);
}

[DataContract]
[Serializable]
public class Site
{
    public Site(int id, string description)
    {
        this.ID = id;
        this.Description = description;
    }

    [DataMember]
    public int ID { get; set; }

    [DataMember]
    public string Description { get; set; }
}

WCF将通用列表序列化为数组,但您可以在添加服务引用时单击“高级”按钮将其转换回通用列表(您将看到默认情况下下拉列表中填充了数组,但您可以将其更改为列表)


使用此选项时,通过导线发送的阵列将转换为通用列表供您使用。它不会更改信息的发送方式。

WCF将通用列表序列化为数组,但您可以在添加服务引用时单击“高级”按钮将其转换回通用列表(您将看到下拉列表默认使用数组填充,但您可以将其更改为列表)


使用此选项时,通过导线发送的阵列将转换为通用列表供您使用。它不会改变信息的发送方式。

我确定
站点
是一个输入错误是吗?是的,抱歉应该是
列表
我确定
站点
是一个输入错误是吗?是的,抱歉应该是
列表
谢谢,这就是我认为WCF将数据序列化为数组的原因。这是一个很棒的转换为列表的选项,这使它以我所需要的方式工作。对于像我这样的新手,您可以右键单击服务引用,然后单击配置引用,以获得将“集合类型”更改为列表的选项。您不必重新添加服务引用。谢谢,这就是我认为WCF将数据序列化为数组的原因。这是一个很棒的转换为列表的选项,这使它以我所需要的方式工作。对于像我这样的新手,您可以右键单击服务引用,然后单击配置引用,以获得将“集合类型”更改为列表的选项。您不必重新添加服务引用。
    public List<Site> Get_Sites(string ntid)
    {
        List<Site> returnList = new List<Site>();
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "SPROC_Name";
            cmd.Parameters.AddWithValue("@NTID", ntid);
            using (SqlConnection conn = new SqlConnection(DB_ConnectionString()))
            {
                cmd.Connection = conn;
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    returnList.Add(new Site(Convert.ToInt16(reader["SiteID"]), reader["SiteDescription"].ToString()));
                }
                conn.Close();
            }
        }
        return returnList;
    }
    List<Site> _Sites;

    public List<Site> Sites
    {
        get
        {
            if (_Sites == null)
            {
                UI_Data.I_UI_ServiceClient sc = new UI_Data.I_UI_ServiceClient();
                _Sites = sc.Get_Sites("MyInfo");
            }
            return _Sites;
        }
    }
    Site[] _Sites;

    public Site[] Sites
    {
        get
        {
            if (_Sites == null)
            {
                UI_Data.I_UI_ServiceClient sc = new UI_Data.I_UI_ServiceClient();
                _Sites = sc.Get_Sites("MyInfo");
            }
            return _Sites;
        }
    }