c# - 关于 List<T> 和 WCF 的说明

标签 c# wcf generics

我是 WCF 的新手,想了解一下。我正在尝试返回 List<T>从我的 WCF,但当我尝试使用它时出现错误。无法转换 T[]到一种 List<T> .以下示例。

问题:这是因为 WCF 可以被多种技术使用并转换为数组吗?

接口(interface):

[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; }
}

代码:

    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;
        }
    }

Consuption using 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;
        }
    }

最佳答案

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

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

关于c# - 关于 List<T> 和 WCF 的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945665/

相关文章:

c# - 将 IEnumerable<T> 转换为 IQueryable<T>,其中 T 未知

c# - Azure 移动服务客户端查询未将控制权返回给 Xamarin Form android 客户端应用程序

c# - 在 C# 中使用 Newtonsoft 反序列化嵌套的 Json 数据并分配给变量

c# - 如何在 C# 中检索 BindingNavigator.PositionItem 的值?

wcf - 如何使用azure服务总线主题订阅中的对象

wcf - 我可以在传出MSMQ上重定向地址错误的邮件吗?

swift - 如何将类型为 Class<Class Implementing Protocol> 的值存储在类型为 [String :Class<Protocol>] in Swift? 的字典中

c# - 无法将类型为 'System.Linq.Expressions.UnaryExpression' 的对象转换为类型 'System.Linq.Expressions.MemberExpression'

silverlight - POCO 的 WCF RIA 服务作为查询参数

java - 抽象递归泛型导致绑定(bind)不匹配