diff --git a/MLEM.Data/Json/JsonExtensions.cs b/MLEM.Data/Json/JsonExtensions.cs new file mode 100644 index 0000000..c02f975 --- /dev/null +++ b/MLEM.Data/Json/JsonExtensions.cs @@ -0,0 +1,40 @@ +using System; +using System.Reflection; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace MLEM.Data.Json { + /// + /// A set of extensions for dealing with the Newtonsoft.JSON . + /// + public static class JsonExtensions { + + /// + /// Changes the to a contract resolver that queries each newly created and allows modifying it easily. + /// This removes the need to create a new contract resolver class for modifying created json properties. + /// + /// The serializer to which to add the property modifier + /// A function that takes in the json property and allows returning a modified property (or the same one) + /// + public static JsonSerializer SetPropertyModifier(this JsonSerializer serializer, Func propertyModifier) { + serializer.ContractResolver = new PropertyModifierResolver(propertyModifier); + return serializer; + } + + private class PropertyModifierResolver : DefaultContractResolver { + + private readonly Func propertyModifier; + + public PropertyModifierResolver(Func propertyModifier) { + this.propertyModifier = propertyModifier; + } + + protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { + var property = base.CreateProperty(member, memberSerialization); + return this.propertyModifier(property); + } + + } + + } +} \ No newline at end of file