/// <summary>
        /// Merge object right into left recursively
        /// </summary>
        /// <param name="left">The left (base) object</param>
        /// <param name="right">The right (new) object</param>
        static void MergeRecur(JSONObject left, JSONObject right)
        {
            if (left.type == Type.NULL)
            {
                left.Absorb(right);
            }
            else if (left.type == Type.OBJECT && right.type == Type.OBJECT)
            {
                for (int i = 0; i < right.list.Count; i++)
                {
                    string key = right.keys[i];
                    if (right[i].isContainer)
                    {
                        if (left.HasField(key))
                        {
                            MergeRecur(left[key], right[i]);
                        }
                        else
                        {
                            left.AddField(key, right[i]);
                        }
                    }
                    else
                    {
                        if (left.HasField(key))
                        {
                            left.SetField(key, right[i]);
                        }
                        else
                        {
                            left.AddField(key, right[i]);
                        }
                    }
                }
            }
            else if (left.type == Type.ARRAY && right.type == Type.ARRAY)
            {
                if (right.Count > left.Count)
                {
#if UNITY_2 || UNITY_3 || UNITY_4 || UNITY_5
                    Debug.LogError
#else
                    Debug.WriteLine
#endif
                        ("Cannot merge arrays when right object has more elements");

                    return;
                }
                for (int i = 0; i < right.list.Count; i++)
                {
                    if (left[i].type == right[i].type)                   //Only overwrite with the same type
                    {
                        if (left[i].isContainer)
                        {
                            MergeRecur(left[i], right[i]);
                        }
                        else
                        {
                            left[i] = right[i];
                        }
                    }
                }
            }
        }
Example #2
0
 public static JSONObject TOJSON(object obj)             //For a generic guess
 {
     if (touched.Add(obj))
     {
         JSONObject result = JSONObject.obj;
         //Fields
         FieldInfo[] fieldinfo = obj.GetType().GetFields();
         foreach (FieldInfo fi in fieldinfo)
         {
             JSONObject val = JSONObject.nullJO;
             if (!fi.GetValue(obj).Equals(null))
             {
                 MethodInfo info = typeof(JSONTemplates).GetMethod("From" + fi.FieldType.Name);
                 if (info != null)
                 {
                     object[] parms = new object[1];
                     parms[0] = fi.GetValue(obj);
                     val      = (JSONObject)info.Invoke(null, parms);
                 }
                 else if (fi.FieldType == typeof(string))
                 {
                     val = JSONObject.CreateStringObject(fi.GetValue(obj).ToString());
                 }
                 else
                 {
                     val = JSONObject.Create(fi.GetValue(obj).ToString());
                 }
             }
             if (val)
             {
                 if (val.type != JSONObject.Type.NULL)
                 {
                     result.AddField(fi.Name, val);
                 }
                 else
                 {
                     Debug.LogWarning("Null for this non-null object, property " + fi.Name + " of class " + obj.GetType().Name + ". Object type is " + fi.FieldType.Name);
                 }
             }
         }
         //Properties
         PropertyInfo[] propertyInfo = obj.GetType().GetProperties();
         foreach (PropertyInfo pi in propertyInfo)
         {
             //This section should mirror part of AssetFactory.AddScripts()
             JSONObject val = JSONObject.nullJO;
             if (!pi.GetValue(obj, null).Equals(null))
             {
                 MethodInfo info = typeof(JSONTemplates).GetMethod("From" + pi.PropertyType.Name);
                 if (info != null)
                 {
                     object[] parms = new object[1];
                     parms[0] = pi.GetValue(obj, null);
                     val      = (JSONObject)info.Invoke(null, parms);
                 }
                 else if (pi.PropertyType == typeof(string))
                 {
                     val = JSONObject.CreateStringObject(pi.GetValue(obj, null).ToString());
                 }
                 else
                 {
                     val = JSONObject.Create(pi.GetValue(obj, null).ToString());
                 }
             }
             if (val)
             {
                 if (val.type != JSONObject.Type.NULL)
                 {
                     result.AddField(pi.Name, val);
                 }
                 else
                 {
                     Debug.LogWarning("Null for this non-null object, property " + pi.Name + " of class " + obj.GetType().Name + ". Object type is " + pi.PropertyType.Name);
                 }
             }
         }
         return(result);
     }
     Debug.LogWarning("trying to save the same data twice");
     return(JSONObject.nullJO);
 }
Example #3
0
        /*
         * Matrix4x4
         */
        public static JSONObject FromMatrix4x4(Matrix4x4 m)
        {
            JSONObject mdata = JSONObject.obj;

            if (m.m00 != 0)
            {
                mdata.AddField("m00", m.m00);
            }
            if (m.m01 != 0)
            {
                mdata.AddField("m01", m.m01);
            }
            if (m.m02 != 0)
            {
                mdata.AddField("m02", m.m02);
            }
            if (m.m03 != 0)
            {
                mdata.AddField("m03", m.m03);
            }
            if (m.m10 != 0)
            {
                mdata.AddField("m10", m.m10);
            }
            if (m.m11 != 0)
            {
                mdata.AddField("m11", m.m11);
            }
            if (m.m12 != 0)
            {
                mdata.AddField("m12", m.m12);
            }
            if (m.m13 != 0)
            {
                mdata.AddField("m13", m.m13);
            }
            if (m.m20 != 0)
            {
                mdata.AddField("m20", m.m20);
            }
            if (m.m21 != 0)
            {
                mdata.AddField("m21", m.m21);
            }
            if (m.m22 != 0)
            {
                mdata.AddField("m22", m.m22);
            }
            if (m.m23 != 0)
            {
                mdata.AddField("m23", m.m23);
            }
            if (m.m30 != 0)
            {
                mdata.AddField("m30", m.m30);
            }
            if (m.m31 != 0)
            {
                mdata.AddField("m31", m.m31);
            }
            if (m.m32 != 0)
            {
                mdata.AddField("m32", m.m32);
            }
            if (m.m33 != 0)
            {
                mdata.AddField("m33", m.m33);
            }
            return(mdata);
        }