Example #1
0
        public void Serialize()
        {
            var Referent = NodeReferenceMap.GetObject(this);

            if (Referent)
            {
                Type  = Referent.GetType().ToString();
                Value = JsonUtility.ToJson(Referent);
            }
        }
Example #2
0
        public bool SerializeObjectReferences()
        {
            bool referencesComplete = false;

            var Referent = NodeReferenceMap.GetObject(this);

            if (Referent)
            {
                var widgetType = Referent.GetType();

                foreach (var info in widgetType.GetMembers().Where(m => m.MemberType == System.Reflection.MemberTypes.Field))
                {
                    var fieldInfo = info.Module.ResolveField(info.MetadataToken);
                    var field     = fieldInfo.GetValue(Referent);

                    if (field is ISerializableReference)
                    {
                        var objects      = ((ISerializableReference)field).GetReferencedObjects();
                        int completeRefs = 0;

                        foreach (var obj in objects)
                        {
                            var objectID = NodeReferenceMap.GetObjectID(obj);

                            if (!string.IsNullOrEmpty(objectID))
                            {
                                completeRefs++;
                                ((ISerializableReference)field).SetReferenceID(obj, objectID);
                            }
                        }

                        if (objects.Count == completeRefs)
                        {
                            referencesComplete = true;
                        }
                    }
                }

                Serialize();
            }
            else
            {
                referencesComplete = true;
            }

            return(referencesComplete);
        }
Example #3
0
        public bool NeedsReferenceSerialization()
        {
            System.Reflection.MemberInfo[] memberInfo = new System.Reflection.MemberInfo[0];
            var Referent = NodeReferenceMap.GetObject(this);

            if (Referent)
            {
                memberInfo = Referent.GetType().GetMembers();
            }
            else if (!string.IsNullOrEmpty(Type))
            {
                var widgetType = System.Type.GetType(Type);

                if (widgetType != null)
                {
                    memberInfo = widgetType.GetMembers();
                }
            }

            foreach (var info in memberInfo)
            {
                if (info.MemberType == System.Reflection.MemberTypes.Field)
                {
                    var token = info.MetadataToken;
                    var type  = info.Module.ResolveField(token);

                    if (type.FieldType.GetInterfaces().Contains(typeof(ISerializableReference)))
                    {
                        return(true);
                    }

                    //Debug.Log("METHOD: " + info + " " + type.FieldType + " " + hasInterface);
                }
            }

            return(false);
        }