关于List <T>和WCF的澄清

Jmy*_*ter 1 c# generics wcf

我对WCF很新,想要一点澄清.我试图List<T>从我的WCF 返回一个,但是当我尝试使用它时出现错误.无法收敛T[]到一种类型List<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; }
}
Run Code Online (Sandbox Code Playgroud)

码:

    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;
    }
Run Code Online (Sandbox Code Playgroud)

使用List进行消耗:(错误)

    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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用T []进行消耗:(使其成功以及为什么我的问题)

    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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Fen*_*ton 5

WCF将通用列表序列化为数组,但您可以通过在添加服务引用时单击高级按钮将它们转换回通用列表(默认情况下,您会看到下拉列表中包含数组,但您可以将它们更改为列表) .

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

  • 对于像我这样可能是新手的用户,您可以右键单击服务引用并单击配置引用以获取将"集合类型"更改为列表的选项.您不必重新添加服务引用. (2认同)