由弱类型向强类型的转化(可参看Type类型的详细使用)

本文介绍了一个名为IEntryDataObject的弱类型接口及其转换方法。该接口定义了一系列用于操作属性数据的方法,如获取和设置属性值等。此外,还提供了一个通用方法用于将IEntryDataObject实例转换为具体类型的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为公司写了个IEntryDataObject的弱类型,

  public interface IEntryDataObject : IDataObject
    {

        IEntryDataObject GetPropertyDataObject(string fieldName);

        void SetPropertyValue(string fieldName, object value);

        object GetPropertyValue(string fieldName);

        IEnumerator<KeyValuePair<string, object>> GetProperties();

        void SetDictionary(IDictionary dictionary);

        void AddJsonObject(JObject jObject);

        string GetKeyPropertyName();

        string GetKeyId();

        void SetKeyId(string keyId);

        int GetPropertiesCount();

        object GetFirstProperty();

        void RemoveProperty(string fieldName);
    }
     public static T EntryDataObjectConvert<T>(IEntryDataObject entryDataObject) where T : class
        {
            var dataObject = System.Activator.CreateInstance<T>();
            EntryDataObjectConvert(dataObject, entryDataObject);
            return dataObject;
        }
//这里有对PropertyInfo的详细使用  
   private static object EntryDataObjectConvert(object dataObject, IEntryDataObject entryDataObject)
        {
            var type = dataObject.GetType();
            foreach (PropertyInfo propertyInfo in type.GetProperties())
            {
                var propertyValue = entryDataObject.GetPropertyValue(propertyInfo.Name);
                if (propertyValue != null)
                {
                    object value;
                    if (propertyValue.GetType() == typeof (EntryDataObject))
                    {
                        var childType = propertyInfo.PropertyType;
                        var childDataObject = System.Activator.CreateInstance(childType);
                        var childEntryDataObject = propertyValue as IEntryDataObject;
                        value = EntryDataObjectConvert(childDataObject, childEntryDataObject);
                    }
                    else if (propertyValue.GetType() == typeof (List<EntryDataObject>) ||
                             propertyValue.GetType() == typeof (List<IEntryDataObject>))
                    {
                        var childListType = propertyInfo.PropertyType;
                        var childDataObjectList = System.Activator.CreateInstance(childListType);
                        var childEntryDataObjectList = propertyValue as List<IEntryDataObject>;
                        value = childDataObjectList;
                        if (childEntryDataObjectList != null)
                        {
                            foreach (var childEntryDataObject in childEntryDataObjectList)
                            {
                                var childType = childListType.GetGenericArguments()[0];
                                var childDataObject = System.Activator.CreateInstance(childType);
                                var result = EntryDataObjectConvert(childDataObject, childEntryDataObject);
                                //((IList) childDataObjectList).Add(result);
                                childListType.InvokeMember("Add",
                                    BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null,
                                    childDataObjectList, new[] {result});
                            }
                        }
                    }
                    else
                    {
                        value = propertyValue;
                    }

                    propertyInfo.SetValue(dataObject, value, null);
                }
            }

            return dataObject;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值