• 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;}
    }
     
  • 相关阅读:
    回溯算法之素数环
    回溯算法之迷宫问题
    回溯算法之0-1背包问题
    贪心算法之搬桌子问题
    贪心算法之背包问题
    动态规划之收集苹果
    动态算法
    c#数和二叉树
    c# 排序算法
    c#栈的习题2
  • 原文地址:https://www.cnblogs.com/huangsheng/p/6117828.html
Copyright © 2020-2023  润新知