我有问题。哈希表如何在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中改变了一些东西?
它是什么以及它为什么工作?