コード例 #1
0
ファイル: MemberSerializationInfo.cs プロジェクト: B-CK/P-Lua
        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));
        }