Beispiel #1
0
        public static void populateFromJsonPatch(this object updateObject, JsonPatchRequest jsonPatchRequest)
        {
            // read from request dto properties
            PropertyInfo[] properties = updateObject.GetType().GetProperties();

            foreach (var op in jsonPatchRequest)
            {
                string fieldName   = op.path.Replace("/", "").ToLower(); // assume leading /slash only for example
                string valueString = op.value;

                // patch field is in type
                if (properties.ToList().Where(x => x.Name.ToLower() == fieldName).Count() > 0)
                {
                    // case-insensitive match by propertyname
                    var persistentProperty = properties.ToList().Where(x => x.Name.ToLower() == fieldName).First();

                    // update property on persistent object
                    // i'm sure this can be improved, but you get the idea...
                    if (persistentProperty.PropertyType == typeof(string))
                    {
                        persistentProperty.SetValue(updateObject, valueString, null);
                    }
                    else if (persistentProperty.PropertyType == typeof(int) || persistentProperty.PropertyType == typeof(int?))
                    {
                        int valInt = 0;
                        if (valueString == null)
                        {
                            // set to default value
                            persistentProperty.SetValue(updateObject, null, null);
                        }
                        else if (Int32.TryParse(valueString, out valInt))
                        {
                            persistentProperty.SetValue(updateObject, valInt, null);
                        }
                    }
                    else if (persistentProperty.PropertyType == typeof(long) || persistentProperty.PropertyType == typeof(long?))
                    {
                        long val = 0;
                        if (valueString == null)
                        {
                            // set to default value
                            persistentProperty.SetValue(updateObject, null, null);
                        }
                        else if (long.TryParse(valueString, out val))
                        {
                            persistentProperty.SetValue(updateObject, val, null);
                        }
                    }
                    else if (persistentProperty.PropertyType == typeof(DateTime) || persistentProperty.PropertyType == typeof(DateTime?))
                    {
                        DateTime valDt = default(DateTime);
                        if (string.IsNullOrEmpty(valueString))
                        {
                            // set to default value
                            persistentProperty.SetValue(updateObject, null, null);
                        }
                        else if (DateTime.TryParse(valueString, out valDt))
                        {
                            persistentProperty.SetValue(updateObject, valDt, null);
                        }
                    }
                    else if (persistentProperty.PropertyType == typeof(float) || persistentProperty.PropertyType == typeof(float?))
                    {
                        float val = default(float);
                        if (string.IsNullOrEmpty(valueString))
                        {
                            // set to default value
                            persistentProperty.SetValue(updateObject, null, null);
                        }
                        else if (float.TryParse(valueString, out val))
                        {
                            persistentProperty.SetValue(updateObject, val, null);
                        }
                    }
                    else
                    {
                        throw new InvalidCastException(string.Format("type {0} conversion not supported yet", persistentProperty.PropertyType.ToString()));
                    }
                }
            }
        }
        public static void populateFromJsonPatch(this object updateObject, JsonPatchRequest jsonPatchRequest)
        {
            // read from request dto properties
            PropertyInfo[] properties = updateObject.GetType().GetProperties();

            foreach (var op in jsonPatchRequest)
            {
                string fieldName = op.path.Replace("/", "").ToLower(); // assume leading /slash only for example
                string valueString = op.value;

                // patch field is in type
                if (properties.ToList().Where(x => x.Name.ToLower() == fieldName).Count() > 0)
                {
                    // case-insensitive match by propertyname
                    var persistentProperty = properties.ToList().Where(x => x.Name.ToLower() == fieldName).First();

                    // update property on persistent object
                    // i'm sure this can be improved, but you get the idea...
                    if (persistentProperty.PropertyType == typeof(string))
                    {
                        persistentProperty.SetValue(updateObject, valueString, null);
                    }
                    else if (persistentProperty.PropertyType == typeof(int) || persistentProperty.PropertyType == typeof(int?))
                    {
                        int valInt = 0;
                        if (valueString == null)
                        {
                            // set to default value
                            persistentProperty.SetValue(updateObject, null, null);
                        }
                        else if (Int32.TryParse(valueString, out valInt))
                        {
                            persistentProperty.SetValue(updateObject, valInt, null);
                        }
                    }
                    else if (persistentProperty.PropertyType == typeof(long) || persistentProperty.PropertyType == typeof(long?))
                    {
                        long val = 0;
                        if (valueString == null)
                        {
                            // set to default value
                            persistentProperty.SetValue(updateObject, null, null);
                        }
                        else if (long.TryParse(valueString, out val))
                        {
                            persistentProperty.SetValue(updateObject, val, null);
                        }
                    }
                    else if (persistentProperty.PropertyType == typeof(DateTime) || persistentProperty.PropertyType == typeof(DateTime?))
                    {
                        DateTime valDt = default(DateTime);
                        if (string.IsNullOrEmpty(valueString))
                        {
                            // set to default value
                            persistentProperty.SetValue(updateObject, null, null);
                        }
                        else if (DateTime.TryParse(valueString, out valDt))
                        {
                            persistentProperty.SetValue(updateObject, valDt, null);
                        }
                    }
                    else if (persistentProperty.PropertyType == typeof(float) || persistentProperty.PropertyType == typeof(float?))
                    {
                        float val = default(float);
                        if (string.IsNullOrEmpty(valueString))
                        {
                            // set to default value
                            persistentProperty.SetValue(updateObject, null, null);
                        }
                        else if (float.TryParse(valueString, out val))
                        {
                            persistentProperty.SetValue(updateObject, val, null);
                        }
                    }
                    else
                    {
                        throw new InvalidCastException(string.Format("type {0} conversion not supported yet", persistentProperty.PropertyType.ToString()));
                    }

                }
            }
        }