WCF 不支持泛型协议 及 通过父类给子类赋值 通过反射加工

WCF 不支持泛型协议及通过父类给子类赋值,解决办法,需要反射进行赋值

Model

    [DataContract]
    [KnownType(typeof(Test1))]
    public class BaseTest
    {
        [DataMember]
        public int BaseTest_Index { get; set; }
        
    }

    [DataContract]
    public class Test1 : BaseTest
    {

        [DataMember]
        public int Test1_Index { get; set; }
        
    }

 

Server

 public interface ITestServer
    {
        void Test(BaseTest baseTest);
    }


    public class TestServer : ITestServer
    {
        
        public void Test(BaseTest baseTest)
        {
            //运用反射进行调用
            using (ServerManager serverManager = new ServerManager(new SqlConnection("数据库连接字符串")))
            {
                //通过反射读取方法,并获取类型
                MethodInfo methodInfo = serverManager.GetType().GetMethod("Test").MakeGenericMethod(baseTest.GetType());
                //调用方法。。。。。
                //如果是多个参数  new object{baseTest, ,  , ,  ,} 严格按着顺序来
                methodInfo.Invoke(serverManager, new[] {baseTest});
                
            }
            
        }
    }

    public class ServerManager:IDisposable
    {
        protected IDbConnection  _db ;

        public ServerManager(IDbConnection db)
        {
            this._db = db;
        }

        public void Test<T>(BaseTest baseTest) where T:BaseTest,new()
        {
            //........//
        }
        
        
        public void Dispose()
        {
            _db.Dispose();
        }
    }

 

Client ,这边选用伪代码来说明,并 通过父类给子类赋值

 public class Client
    {
        //.......//
        public BaseTest basetest = new Test1();

        
        public void Basetest(BaseTest baseTest)
        {
            
            //通过反射,从父类中获取子类属性,并进行赋值
            PropertyInfo property = baseTest.GetType().GetProperties().FirstOrDefault(t=>t.Name =="Test1_Index");
            //赋新值
            property.SetValue(baseTest,1);
           
            //伪代码
            
            TestServer server = new TestServer();
            server.Test(baseTest);
            
            //
            
        }



        //.......//


    }

 

posted @ 2020-12-02 13:45  Sliders&蜗牛  阅读(94)  评论(0编辑  收藏  举报