private static MemberSerializationInfo CreateInfoFor(MemberInfo member, SerializationBackendFlags serializationBackend) { SerializationFlags flags = 0; // Is the member a field, property or auto-property? if (member is FieldInfo) { var f = member as FieldInfo; flags |= SerializationFlags.Field; if (f.IsPublic) { flags |= SerializationFlags.Public; } } else if (member is PropertyInfo) { var p = member as PropertyInfo; flags |= SerializationFlags.Property; if (p.GetGetMethod() != null && p.GetGetMethod().IsPublic || p.GetSetMethod() != null && p.GetSetMethod().IsPublic) { flags |= SerializationFlags.Public; } if (p.IsAutoProperty()) { flags |= SerializationFlags.AutoProperty; } } // Will Unity serialize the member? if ((serializationBackend & SerializationBackendFlags.Unity) != 0 && UnitySerializationUtility.GuessIfUnityWillSerialize(member)) { flags |= SerializationFlags.SerializedByUnity; } // Will Odin serialize the member? if ((serializationBackend & SerializationBackendFlags.Odin) != 0 && UnitySerializationUtility.OdinWillSerialize(member, false)) { flags |= SerializationFlags.SerializedByOdin; } // Does the member have a SerializeField attribute? if (member.HasCustomAttribute <SerializeField>()) { flags |= SerializationFlags.SerializeFieldAttribute; } // Does the member have a OdinSerialize attribute? if (member.HasCustomAttribute <OdinSerializeAttribute>()) { flags |= SerializationFlags.OdinSerializeAttribute; } // Does the member have a NonSerialized attribute? if (member.HasCustomAttribute <NonSerializedAttribute>()) { flags |= SerializationFlags.NonSerializedAttribute; } // Does Unity support serializing the type? if (serializationBackend.HasAll(SerializationBackendFlags.Unity) && UnitySerializationUtility.GuessIfUnityWillSerialize(member.GetReturnType())) { flags |= SerializationFlags.TypeSupportedByUnity; } return(new MemberSerializationInfo(member, CreateNotes(member, flags, serializationBackend), flags, serializationBackend)); }