您的位置:首页 > 其它

WCF优雅使用 KnownType标记的方法

2017-05-10 11:03 211 查看
[KnownType("DerivedTypes")]
[DataContract]
publicabstractclassTaskBase
{
//otherclassmembershere

privatestaticType[]DerivedTypes()
{
returntypeof(TaskBase).GetDerivedTypes(Assembly.GetExecutingAssembly()).ToArray();
}
}


用于反射实现KnowType而不用全部标记。无论是参数还是作为结果返回还是作为其中的一个成员都要继承此类

publicstaticIEnumerable<Type>GetDerivedTypes(thisTypebaseType,Assemblyassembly)
{
vartypes=fromtinassembly.GetTypes()
wheret.IsSubclassOf(baseType)
selectt;

returntypes;
}


这是上一个代码块中引用的GetDerivedTypes的方法实现

将TaskBase作为base类继承到序列化的类中,比如我有类Foo:


[DataContract]
publicclassFoo
{
  [DataMember]
  publicobjectHello{get;set;}
}


[DataContract]
publicclassBar
{
  [DataMember]
  publiclongId{get;set;}
}


[code]

如果仅仅是Bar被序列化传递,那么Bar集成于
TaskBase就可以了,如果是
Foo的Hello成员是Bar类的话,那么两个类都要继承,即:


[DataContract]
publicclassFoo:TaskBase
{
  [DataMember]
  publicobjectHello{get;set;}
}

[DataContract]
publicclassBar:TaskBase
{
  [DataMember]
  publiclongId{get;set;}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: