Вы можете программно применить конвертер только в определенных сборках, используя пользовательский ContractResolver
, например:
public class CustomResolver : DefaultContractResolver
{
private Assembly[] TargetAssemblies { get; set; }
public CustomResolver(params Assembly[] targetAssemblies)
{
TargetAssemblies = targetAssemblies;
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization ms)
{
JsonProperty prop = base.CreateProperty(member, ms);
if (prop.PropertyType == typeof(string) &&
TargetAssemblies.Contains(prop.DeclaringType.Assembly))
{
prop.Converter = new StringTrimmer();
}
return prop;
}
}
Затем используйте его в настройках по умолчанию, например, где Foo
заменяется одним из известных классов в сборке вашего приложения:
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
ContractResolver = new CustomResolver(typeof(Foo).Assembly)
};
Вы можете добавить более одной сборки, если вам нужно, например ::
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
ContractResolver = new CustomResolver(typeof(Foo).Assembly, typeof(Bar).Assembly)
};