如何使用反射从 WCF 获取数据
本文关键字:获取 数据 WCF 何使用 反射 | 更新日期: 2023-09-27 18:32:54
我想尝试创建多个 WCF 服务。他们会返回List<BaseObjectType>
或IQueryable<baseObjectType>
.
BaseObjectType
是某个对象的父对象(如Person
、Invoice
、Document
等)。所以WCF服务可以返回List<BaseObjectType>
但是如果有必要,它可以返回例如List<Person>
,List<Invoice>
等。
我想创建通用网格,它将具有用于反射的字符串属性 SourceType。
是否可以创建方法,该方法将使用反射调用 WCF 服务并用List<T>
填充网格?
对基本协定的每个子类使用 KnownTypes 属性,然后 WCF 将知道如何正确序列化和反序列化协定。客户端实际上并不需要反射,因为反序列化类型将属于正确的类型。
请看http://www.codeproject.com/Tips/601224/What-is-KnownType-Attribute-and
服务定义
public void IService{
List<BaseObject> GetObjects();
}
[DataContract]
[KnownTypes(typeof(DerivedObject))]
public class BaseObject(){
[DataMember]
public void string BaseProperty{get;set;}
}
public class DerivedObject:BaseObject(){
[DataMember]
public void string DerivedProperty{get;set;}
}
在客户端代码中
var s = new Service();
var objects = s.GetObjects();
//objects can contain both DerivedObjects or BaseObjects
WCF 中不支持这种泛型。如果是这样,那就太好了,因为我遇到过一些让客户端将泛型参数传递给服务器会很棒的情况。遗憾的是,如果在 OperationContract 定义中使用泛型,WCF 会在运行时抛出 WillBeNiceButNotHappenException。