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);