using System.Collections.Generic;
using System.Collections;
public static class AppExtensions
public static T PatchFrom<T>(this T updateModel, Dictionary<string, object> patchModel)
var keysToUpdate = new List<string>(patchModel.Keys);
foreach (var key in keysToUpdate)
var parentType = updateModel.GetType();
var keyProperty = parentType.GetProperty(key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
var keyType = keyProperty.GetType();
updateModel.GetType().GetProperty(key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance).SetValue(updateModel, patchModel[key], null);
public string A { get; set; }
public int B { get; set; }
public class PatchableModel
public class UpdateTestModel
public string A { get; set; }
public int B { get; set; }
public List<int> C { get; set; }
public static void Main()
var patchPayload = new Dictionary<string, object>() { {"b", 2} };
var existingEntity = new TestEntity { A = "Test", B = 2 };
var patchedEntity = existingEntity.PatchFrom(patchPayload);
Console.WriteLine(JsonSerializer.Serialize(patchedEntity));