我有問題。哈希表如何在WCF中工作?
考慮下面
IService1.cs
[ServiceContract]
public interface IService1
{
[OperationContract]
Hashtable GetHashTableCollection();
[OperationContract]
List<A> GetARecords();
}
[DataContract]
public class A
{
[DataMember]
public int MyProperty { get; set; }
[DataMember]
public Hashtable MyTable { get; set; }
}
Service1.cs
public class Service1 : IService1
{
public Hashtable GetHashTableCollection()
{
Hashtable hashtable = new Hashtable();
hashtable.Add("Area", 1000);
hashtable.Add("Perimeter", 55);
hashtable.Add("Mortgage", 540);
return hashtable;
}
public List<A> GetARecords()
{
List<A> Alist = new List<A>();
Alist.Add(new A { MyProperty = 1, MyTable = GetHashTableCollection() });
Alist.Add(new A { MyProperty = 2, MyTable = GetHashTableCollection() });
return Alist;
}
}
和客戶機應用是作爲下
private void button1_Click(object sender, EventArgs e)
{
ServiceReference1.Service1Client sc = new ServiceReference1.Service1Client();
var r1 = sc.GetHashTableCollection();
var r2 = sc.GetARecords();
}
它工作正常,沒有任何問題。 HashTable已被轉換爲Dictionary對象。
我的印象是,因爲HashTable使用IDictionary,所以它應該在編譯時失敗(發生在3.5)。
無法隱式轉換類型 'System.Collections.Generic.Dictionary' 到 'System.Collections.Hashtable'
但是,它的工作。怎麼樣?
我是否缺少任何基本概念?或者DataContractSerializer正在做這項工作?或者在dot.net 4.0中改變了一些東西?
它是什麼以及它爲什麼工作?