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); }
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); } } } }