From 6394a222093d9e5f97bbb8c54a1c2a705414fbc7 Mon Sep 17 00:00:00 2001 From: Saeed Barari Date: Sat, 6 Jul 2024 17:28:14 +0330 Subject: [PATCH 1/4] fixed issue 166 (SerializeReference on private fields with no SerializeField) --- Editor/Utilities/TriUnitySerializationUtilities.cs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Editor/Utilities/TriUnitySerializationUtilities.cs b/Editor/Utilities/TriUnitySerializationUtilities.cs index 2546f4fd..0c3ce195 100644 --- a/Editor/Utilities/TriUnitySerializationUtilities.cs +++ b/Editor/Utilities/TriUnitySerializationUtilities.cs @@ -25,14 +25,11 @@ public static bool IsSerializableByUnity(FieldInfo fieldInfo) return false; } - if (fieldInfo.GetCustomAttribute() != null) - { - return true; - } - if (fieldInfo.IsPublic || fieldInfo.GetCustomAttribute() != null) { - return IsTypeSerializable(fieldInfo.FieldType); + return + fieldInfo.GetCustomAttribute() != null || + IsTypeSerializable(fieldInfo.FieldType); } return false; From e3689704dfffceab42ba55dbf97ee3c0d4130df8 Mon Sep 17 00:00:00 2001 From: Saeed Barari Date: Sat, 6 Jul 2024 18:32:24 +0330 Subject: [PATCH 2/4] quick fix --- .../TriUnitySerializationUtilities.cs | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/Editor/Utilities/TriUnitySerializationUtilities.cs b/Editor/Utilities/TriUnitySerializationUtilities.cs index 0c3ce195..676ee85c 100644 --- a/Editor/Utilities/TriUnitySerializationUtilities.cs +++ b/Editor/Utilities/TriUnitySerializationUtilities.cs @@ -25,11 +25,28 @@ public static bool IsSerializableByUnity(FieldInfo fieldInfo) return false; } + if (fieldInfo.GetCustomAttribute() != null) + { + // if it's a list or array, the base type should be serializable + if (fieldInfo.FieldType.IsArray) + { + if (fieldInfo.FieldType.GetElementType().IsSerializable) + return true; + } + else if (fieldInfo.FieldType == typeof(List<>)) + { + if (fieldInfo.FieldType.GenericTypeArguments[0].IsSerializable) + return true; + } + else + { + return true; + } + } + if (fieldInfo.IsPublic || fieldInfo.GetCustomAttribute() != null) { - return - fieldInfo.GetCustomAttribute() != null || - IsTypeSerializable(fieldInfo.FieldType); + return IsTypeSerializable(fieldInfo.FieldType); } return false; From 665f8d732174491bd05411fb12af6610568886c3 Mon Sep 17 00:00:00 2001 From: Saeed Barari Date: Sat, 6 Jul 2024 19:00:08 +0330 Subject: [PATCH 3/4] fixed issue with List<> detection --- Editor/Utilities/TriUnitySerializationUtilities.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Editor/Utilities/TriUnitySerializationUtilities.cs b/Editor/Utilities/TriUnitySerializationUtilities.cs index 676ee85c..25ddd395 100644 --- a/Editor/Utilities/TriUnitySerializationUtilities.cs +++ b/Editor/Utilities/TriUnitySerializationUtilities.cs @@ -32,11 +32,15 @@ public static bool IsSerializableByUnity(FieldInfo fieldInfo) { if (fieldInfo.FieldType.GetElementType().IsSerializable) return true; + else + return false; } - else if (fieldInfo.FieldType == typeof(List<>)) + else if (fieldInfo.FieldType.IsGenericType && fieldInfo.FieldType.GetGenericTypeDefinition() == typeof(List<>)) { if (fieldInfo.FieldType.GenericTypeArguments[0].IsSerializable) return true; + else + return false; } else { From a13ce3cefbf6eae8008cb6a773ef7f2f78b3e45e Mon Sep 17 00:00:00 2001 From: Saeed Barari Date: Sun, 7 Jul 2024 19:10:06 +0330 Subject: [PATCH 4/4] fixed issue of intrface based SerializeReferences not appearing --- Editor/Utilities/TriUnitySerializationUtilities.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Editor/Utilities/TriUnitySerializationUtilities.cs b/Editor/Utilities/TriUnitySerializationUtilities.cs index 25ddd395..fc0e4e02 100644 --- a/Editor/Utilities/TriUnitySerializationUtilities.cs +++ b/Editor/Utilities/TriUnitySerializationUtilities.cs @@ -30,14 +30,16 @@ public static bool IsSerializableByUnity(FieldInfo fieldInfo) // if it's a list or array, the base type should be serializable if (fieldInfo.FieldType.IsArray) { - if (fieldInfo.FieldType.GetElementType().IsSerializable) + var type = fieldInfo.FieldType.GetElementType(); + if (type.IsSerializable || type.IsInterface) return true; else return false; } else if (fieldInfo.FieldType.IsGenericType && fieldInfo.FieldType.GetGenericTypeDefinition() == typeof(List<>)) { - if (fieldInfo.FieldType.GenericTypeArguments[0].IsSerializable) + var type = fieldInfo.FieldType.GenericTypeArguments[0]; + if (type.IsSerializable || type.IsInterface) return true; else return false;