zoukankan      html  css  js  c++  java
  • 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);
                
                //
                
            }
    
    
    
            //.......//
    
    
        }
  • 相关阅读:
    纯JDBC代码连接实例 + 完整代码
    计算机语言及二进制
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/Bull-Rush/p/14073339.html
Copyright © 2011-2022 走看看