diff --git a/Assets/Newtonsoft.Json.UnityConverters.Tests/Features.meta b/Assets/Newtonsoft.Json.UnityConverters.Tests/Features.meta
new file mode 100644
index 0000000..1f01250
--- /dev/null
+++ b/Assets/Newtonsoft.Json.UnityConverters.Tests/Features.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7ea707c5c3f72fa44b18e01c4f33c6e9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Newtonsoft.Json.UnityConverters.Tests/Features/HiddenConverterTests.cs b/Assets/Newtonsoft.Json.UnityConverters.Tests/Features/HiddenConverterTests.cs
new file mode 100644
index 0000000..5e9fce6
--- /dev/null
+++ b/Assets/Newtonsoft.Json.UnityConverters.Tests/Features/HiddenConverterTests.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Linq;
+using NUnit.Framework;
+
+namespace Newtonsoft.Json.UnityConverters.Tests
+{
+ public class HiddenConverterTests
+ {
+ [Test]
+ public void AssertHiddenConverterNotRegistered()
+ {
+ var registered = UnityConverterInitializer.defaultUnityConvertersSettings.Converters
+ .Any(x => x.GetType() == typeof(TestHiddenJsonConverter));
+
+ Assert.IsFalse(registered, "TestHiddenJsonConverter registered, but should not.");
+ }
+
+ [Test]
+ public void AssertVisibleConverterRegistered()
+ {
+ var registered = UnityConverterInitializer.defaultUnityConvertersSettings.Converters
+ .Any(x => x.GetType() == typeof(TestVisibleJsonConverter));
+
+ Assert.IsTrue(registered, "TestVisibleJsonConverter not registered, but should be.");
+ }
+
+
+ [HideInJsonConverterSettings]
+ internal class TestHiddenJsonConverter : JsonConverter
+ {
+ public override bool CanConvert(Type objectType) => false;
+
+ public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+
+ internal class TestVisibleJsonConverter : JsonConverter
+ {
+ public override bool CanConvert(Type objectType) => false;
+
+ public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+ {
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
diff --git a/Assets/Newtonsoft.Json.UnityConverters.Tests/Features/HiddenConverterTests.cs.meta b/Assets/Newtonsoft.Json.UnityConverters.Tests/Features/HiddenConverterTests.cs.meta
new file mode 100644
index 0000000..08244a9
--- /dev/null
+++ b/Assets/Newtonsoft.Json.UnityConverters.Tests/Features/HiddenConverterTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9068074b3cda1114bac398391d2387cf
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/HideInJsonConverterSettings.cs b/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/HideInJsonConverterSettings.cs
new file mode 100644
index 0000000..f230656
--- /dev/null
+++ b/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/HideInJsonConverterSettings.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace Newtonsoft.Json.UnityConverters
+{
+ ///
+ /// The attribute allows to hide JsonConverter from Json.Net converters settings
+ /// and exclude it from auto sync process.
+ ///
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
+ public class HideInJsonConverterSettings : Attribute { }
+}
diff --git a/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/HideInJsonConverterSettings.cs.meta b/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/HideInJsonConverterSettings.cs.meta
new file mode 100644
index 0000000..5b44e62
--- /dev/null
+++ b/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/HideInJsonConverterSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b9cd605ff4b2fe345bca0ab48417ef23
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/UnityConverterInitializer.cs b/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/UnityConverterInitializer.cs
index e73ddcf..5692a45 100644
--- a/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/UnityConverterInitializer.cs
+++ b/Packages/Newtonsoft.Json-for-Unity.Converters/UnityConverters/UnityConverterInitializer.cs
@@ -26,6 +26,7 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
+using System.Reflection;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.UnityConverters.Configuration;
using Newtonsoft.Json.UnityConverters.Helpers;
@@ -195,6 +196,7 @@ private static IEnumerable FilterToJsonConvertersAndOrder(IEnumerable typeof(JsonConverter).IsAssignableFrom(type)
&& !type.IsAbstract && !type.IsGenericTypeDefinition
+ && !type.IsDefined(typeof(HideInJsonConverterSettings))
&& type.GetConstructor(Array.Empty()) != null
)
.OrderBy(type => type.FullName);