WCF優雅使用 KnownType標記的方法
[KnownType("DerivedTypes")] [DataContract] public abstract class TaskBase { // other class members here private static Type[] DerivedTypes() { return typeof(TaskBase).GetDerivedTypes(Assembly.GetExecutingAssembly()).ToArray(); } }
用于反射實現KnowType而不用全部標記。無論是參數還是作為結果返回還是作為其中的一個成員都要繼承此類
public static IEnumerable<Type> GetDerivedTypes(this Type baseType, Assembly assembly) { var types = from t in assembly.GetTypes() where t.IsSubclassOf(baseType) select t; return types; }
這是上一個代碼塊中引用的GetDerivedTypes的方法實現
將TaskBase作為base類繼承到序列化的類中,比如我有類Foo:
[DataContract] public class Foo { [DataMember] public object Hello {get;set;} }
[DataContract] public class Bar { [DataMember] public long Id {get;set;} }
如果僅僅是Bar被序列化傳遞,那么Bar集成于TaskBase就可以了,如果是Foo的Hello成員是Bar類的話,那么兩個類都要繼承,即:
[DataContract] public class Foo:TaskBase { [DataMember] public object Hello {get;set;} } [DataContract] public class Bar:TaskBase { [DataMember] public long Id {get;set;} }
原創作者:http://www.rzrgm.cn/huangsheng/

浙公網安備 33010602011771號