|
@@ -47,6 +47,22 @@ namespace InABox.Core
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Remove properties marked as <see cref="DoNotSerialize"/>
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="typeInfo"></param>
|
|
|
+ private static void DoNotSerializeModifier(JsonTypeInfo typeInfo)
|
|
|
+ {
|
|
|
+ if (typeInfo.Kind == JsonTypeInfoKind.Object)
|
|
|
+ {
|
|
|
+ var toRemove = typeInfo.Properties.Where(x => x.AttributeProvider?.IsDefined(typeof(DoNotSerialize), false) == true).ToList();
|
|
|
+ foreach (var prop in toRemove)
|
|
|
+ {
|
|
|
+ typeInfo.Properties.Remove(prop);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public static List<JsonConverter> DefaultConverters { get; } = new List<JsonConverter>()
|
|
|
{
|
|
|
new CoreTableJsonConverter(),
|
|
@@ -78,6 +94,12 @@ namespace InABox.Core
|
|
|
{
|
|
|
settings.TypeInfoResolver = new PopulateTypeInfoResolver(new DefaultJsonTypeInfoResolver());
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ settings.TypeInfoResolver = new DefaultJsonTypeInfoResolver();
|
|
|
+ }
|
|
|
+ settings.TypeInfoResolver = settings.TypeInfoResolver
|
|
|
+ .WithAddedModifier(DoNotSerializeModifier);
|
|
|
|
|
|
settings.WriteIndented = indented;
|
|
|
return settings;
|