diff --git a/Prowl.Runtime/Serializer/Serializer.cs b/Prowl.Runtime/Serializer/Serializer.cs index 44f5190e7..7bb6397f5 100644 --- a/Prowl.Runtime/Serializer/Serializer.cs +++ b/Prowl.Runtime/Serializer/Serializer.cs @@ -394,17 +394,6 @@ static object CreateInstance(Type type) return Activator.CreateInstance(type) ?? throw new InvalidOperationException("Failed to create instance of type: " + type); } - static IEnumerable GetAllFields(Type? t) - { - if (t == null) - return Enumerable.Empty(); - - BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | - BindingFlags.Instance | BindingFlags.DeclaredOnly; - - return t.GetFields(flags).Concat(GetAllFields(t.BaseType)); - } - #endregion } } diff --git a/Prowl.Runtime/Utils/NodeSystem/NodeGraph.cs b/Prowl.Runtime/Utils/NodeSystem/NodeGraph.cs index 4c368e526..78e98bd9a 100644 --- a/Prowl.Runtime/Utils/NodeSystem/NodeGraph.cs +++ b/Prowl.Runtime/Utils/NodeSystem/NodeGraph.cs @@ -114,10 +114,6 @@ protected virtual void OnDestroy() public void OnBeforeSerialize() { } - public void PostSerialize() { } - - public void PreDeserialize() { } - public void OnAfterDeserialize() { // Clear null nodes diff --git a/Prowl.Runtime/Utils/NodeSystem/NodePort.cs b/Prowl.Runtime/Utils/NodeSystem/NodePort.cs index 70528baf5..04dd4d8a6 100644 --- a/Prowl.Runtime/Utils/NodeSystem/NodePort.cs +++ b/Prowl.Runtime/Utils/NodeSystem/NodePort.cs @@ -4,7 +4,7 @@ namespace Prowl.Runtime.NodeSystem { - + [Serializable] public class NodePort { public enum IO { Input, Output } diff --git a/Prowl.Runtime/Utils/RuntimeUtils.cs b/Prowl.Runtime/Utils/RuntimeUtils.cs index 25f56b487..a09cb539c 100644 --- a/Prowl.Runtime/Utils/RuntimeUtils.cs +++ b/Prowl.Runtime/Utils/RuntimeUtils.cs @@ -40,14 +40,25 @@ public static Type FindType(string qualifiedTypeName) public static FieldInfo[] GetSerializableFields(object target) { - FieldInfo[] fields = target.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + FieldInfo[] fields = GetAllFields(target.GetType()).ToArray(); // Only allow Publics or ones with SerializeField - fields = fields.Where(field => field.IsPublic || Attribute.IsDefined(field, typeof(SerializeFieldAttribute))).ToArray(); + fields = fields.Where(field => (field.IsPublic || field.GetCustomAttribute() != null) && field.GetCustomAttribute() == null).ToArray(); // Remove Public NonSerialized fields fields = fields.Where(field => !field.IsPublic || field.GetCustomAttribute() == null).ToArray(); return fields; } + public static IEnumerable GetAllFields(Type? t) + { + if (t == null) + return Enumerable.Empty(); + + BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | + BindingFlags.Instance | BindingFlags.DeclaredOnly; + + return t.GetFields(flags).Concat(GetAllFields(t.BaseType)); + } + public static object? GetValue(this MemberInfo member, object? target) { if (member is PropertyInfo prop)