コード例 #1
0
        public static object ConvertJTokenToPropertyTypeValue(object @object, string key, Type propertyInfoPropertyType)
        {
            JObject json = @object as JObject;

            if (json == null)
            {
                return(null);
            }

            JToken keyValue = json.GetValue(key);

            if (keyValue != null)
            {
                object value = CovertFromJTokePrimitiveType(keyValue, propertyInfoPropertyType);
                if (value != null)
                {
                    return(value);
                }
                if (keyValue.Type == JTokenType.Object)
                {
                    dynamic childJObject  = keyValue;
                    object  relatedEntity = Activator.CreateInstance(propertyInfoPropertyType);

                    ICollection <string>         keys = GetJsonKeys(childJObject);
                    GetPropertyValueByRequestKey getPropertyValueByRequestKey = ConvertJTokenToPropertyTypeValue;
                    UpdateEntityValue(relatedEntity, childJObject, keys, getPropertyValueByRequestKey);

                    return(relatedEntity);
                }
                return(null);
            }

            return(null);
        }
コード例 #2
0
        internal static void UpdateEntityValue(object newEntity, object json, ICollection <string> keys, GetPropertyValueByRequestKey getPropertyValueByRequestKey)
        {
            Type type = newEntity.GetType();

            PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.Public);
            foreach (PropertyInfo propertyInfo in propertyInfos)
            {
                foreach (string key in keys)
                {
                    if (propertyInfo.Name.ToLower().Equals(key.ToLower()))
                    {
                        object propertyValue = getPropertyValueByRequestKey(json, key, propertyInfo.PropertyType);
                        propertyInfo.SetValue(newEntity, propertyValue);
                    }
                }
            }
        }