public override object Value(Type type)
 {
     if (OnlineMapsReflectionHelper.IsValueType(type))
     {
         return(Activator.CreateInstance(type));
     }
     return(null);
 }
Esempio n. 2
0
    public static OnlineMapsJSONItem Serialize(object obj)
    {
#if !UNITY_WP_8_1 || UNITY_EDITOR
        if (obj == null || obj is DBNull)
        {
            return(new OnlineMapsJSONValue(obj, OnlineMapsJSONValue.ValueType.NULL));
        }
#else
        if (obj == null)
        {
            return(new OnlineMapsJSONValue(obj, OnlineMapsJSONValue.ValueType.NULL));
        }
#endif
        if (obj is string || obj is bool || obj is int || obj is long || obj is short || obj is float || obj is double)
        {
            return(new OnlineMapsJSONValue(obj));
        }
        if (obj is IEnumerable)
        {
            IEnumerable         v     = (IEnumerable)obj;
            OnlineMapsJSONArray array = new OnlineMapsJSONArray();
            foreach (var item in v)
            {
                array.Add(Serialize(item));
            }
            return(array);
        }

        OnlineMapsJSONObject o = new OnlineMapsJSONObject();
        Type type = obj.GetType();
        IEnumerable <FieldInfo> fields = OnlineMapsReflectionHelper.GetFields(type, BindingFlags.Instance | BindingFlags.Public);
        foreach (FieldInfo field in fields)
        {
            o.Add(field.Name, Serialize(field.GetValue(obj)));
        }
        return(o);
    }
Esempio n. 3
0
    private static object DeserializeArray(Type type, List <object> list)
    {
        if (list == null || list.Count == 0)
        {
            return(null);
        }
        if (type.IsArray)
        {
            Type  elementType = type.GetElementType();
            Array v           = Array.CreateInstance(elementType, list.Count);
            for (int i = 0; i < list.Count; i++)
            {
                object child = list[i];
                object item;
                if (child is IDictionary)
                {
                    item = DeserializeObject(elementType, child as Dictionary <string, object>);
                }
                else if (child is IList)
                {
                    item = DeserializeArray(elementType, child as List <object>);
                }
                else
                {
                    item = DeserializeValue(elementType, child);
                }
                v.SetValue(item, i);
            }

            return(v);
        }
        if (OnlineMapsReflectionHelper.IsGenericType(type))
        {
            Type   listType = OnlineMapsReflectionHelper.GetGenericArguments(type)[0];
            object v        = Activator.CreateInstance(type);

            for (int i = 0; i < list.Count; i++)
            {
                object child = list[i];
                object item;
                if (child is IDictionary)
                {
                    item = DeserializeObject(listType, child as Dictionary <string, object>);
                }
                else if (child is IList)
                {
                    item = DeserializeArray(listType, child as List <object>);
                }
                else
                {
                    item = DeserializeValue(listType, child);
                }
                try
                {
                    MethodInfo methodInfo = OnlineMapsReflectionHelper.GetMethod(type, "Add");
                    if (methodInfo != null)
                    {
                        methodInfo.Invoke(v, new[] { item });
                    }
                }
                catch
                {
                }
            }

            return(v);
        }


        return(null);
    }
Esempio n. 4
0
    private static object DeserializeObject(Type type, Dictionary <string, object> table)
    {
        IEnumerable <MemberInfo> members = OnlineMapsReflectionHelper.GetMembers(type, BindingFlags.Instance | BindingFlags.Public);

        object v = Activator.CreateInstance(type);

        foreach (MemberInfo member in members)
        {
#if !NETFX_CORE
            MemberTypes memberType = member.MemberType;
            if (memberType != MemberTypes.Field && memberType != MemberTypes.Property)
            {
                continue;
            }
#else
            MemberTypes memberType;
            if (member is PropertyInfo)
            {
                memberType = MemberTypes.Property;
            }
            else if (member is FieldInfo)
            {
                memberType = MemberTypes.Field;
            }
            else
            {
                continue;
            }
#endif

            if (memberType == MemberTypes.Property && !((PropertyInfo)member).CanWrite)
            {
                continue;
            }
            object item;

#if !NETFX_CORE
            object[]       attributes = member.GetCustomAttributes(typeof(AliasAttribute), true);
            AliasAttribute alias      = attributes.Length > 0 ? attributes[0] as AliasAttribute : null;
#else
            IEnumerable <Attribute> attributes = member.GetCustomAttributes(typeof(AliasAttribute), true);
            AliasAttribute          alias      = null;
            foreach (Attribute a in attributes)
            {
                alias = a as AliasAttribute;
                break;
            }
#endif
            if (alias == null || !alias.ignoreFieldName)
            {
                if (table.TryGetValue(member.Name, out item))
                {
                    DeserializeValue(memberType, member, item, v);
                    continue;
                }
            }
            if (alias != null)
            {
                for (int j = 0; j < alias.aliases.Length; j++)
                {
                    if (table.TryGetValue(alias.aliases[j], out item))
                    {
                        DeserializeValue(memberType, member, item, v);
                        break;
                    }
                }
            }
        }

        return(v);
    }
    public override object Deserialize(Type type)
    {
        IEnumerable <MemberInfo> members = OnlineMapsReflectionHelper.GetMembers(type, BindingFlags.Instance | BindingFlags.Public);

        return(Deserialize(type, members));
    }
Esempio n. 6
0
    public override object Value(Type t)
    {
        if (_type == ValueType.NULL || _value == null)
        {
            if (OnlineMapsReflectionHelper.IsValueType(t))
            {
                return(Activator.CreateInstance(t));
            }
            return(null);
        }

        if (t == typeof(string))
        {
            return(Convert.ChangeType(_value, t));
        }

        if (_type == ValueType.BOOLEAN)
        {
            if (t == typeof(bool))
            {
                return(Convert.ChangeType(_value, t));
            }
        }
        else if (_type == ValueType.DOUBLE)
        {
            if (t == typeof(double))
            {
                return(Convert.ChangeType(_value, t, OnlineMapsUtils.numberFormat));
            }
            if (t == typeof(float))
            {
                return(Convert.ChangeType((double)_value, t, OnlineMapsUtils.numberFormat));
            }
        }
        else if (_type == ValueType.LONG)
        {
            if (t == typeof(long))
            {
                return(Convert.ChangeType(_value, t));
            }
#if UNITY_EDITOR
            if (t.IsSubclassOf(typeof(UnityEngine.Object)))
            {
                return(UnityEditor.EditorUtility.InstanceIDToObject((int)(long)_value));
            }
#endif

            try
            {
                return(Convert.ChangeType((long)_value, t));
            }
            catch (Exception e)
            {
                Debug.Log(e.Message + "\n" + e.StackTrace);
                return(null);
            }
        }
        else if (_type == ValueType.STRING)
        {
            MethodInfo method = OnlineMapsReflectionHelper.GetMethod(t, "Parse", new[] { typeof(string), typeof(IFormatProvider) });
            if (method != null)
            {
                return(method.Invoke(null, new object[] { value, OnlineMapsUtils.numberFormat }));
            }

            method = OnlineMapsReflectionHelper.GetMethod(t, "Parse", new[] { typeof(string) });
            return(method.Invoke(null, new[] { value }));
        }
        StringBuilder builder = new StringBuilder();
        ToJSON(builder);
        throw new InvalidCastException(t.FullName + "\n" + builder);
    }
    public void DeserializeObject(object obj, BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Public)
    {
        IEnumerable <MemberInfo> members = OnlineMapsReflectionHelper.GetMembers(obj.GetType(), bindingFlags);

        DeserializeObject(obj, members);
    }
Esempio n. 8
0
    public override object Deserialize(Type type)
    {
        if (_count == 0)
        {
            return(null);
        }

        if (type.IsArray)
        {
            Type  elementType = type.GetElementType();
            Array v           = Array.CreateInstance(elementType, _count);
            if (array[0] is OnlineMapsJSONObject)
            {
                IEnumerable <MemberInfo> members = OnlineMapsReflectionHelper.GetMembers(elementType, BindingFlags.Instance | BindingFlags.Public);
                for (int i = 0; i < _count; i++)
                {
                    OnlineMapsJSONItem child = array[i];
                    object             item  = (child as OnlineMapsJSONObject).Deserialize(elementType, members);
                    v.SetValue(item, i);
                }
            }
            else
            {
                for (int i = 0; i < _count; i++)
                {
                    OnlineMapsJSONItem child = array[i];
                    object             item  = child.Deserialize(elementType);
                    v.SetValue(item, i);
                }
            }

            return(v);
        }
        if (OnlineMapsReflectionHelper.IsGenericType(type))
        {
            Type   listType = OnlineMapsReflectionHelper.GetGenericArguments(type)[0];
            object v        = Activator.CreateInstance(type);

            if (array[0] is OnlineMapsJSONObject)
            {
                IEnumerable <MemberInfo> members = OnlineMapsReflectionHelper.GetMembers(listType, BindingFlags.Instance | BindingFlags.Public);
                for (int i = 0; i < _count; i++)
                {
                    OnlineMapsJSONItem child = array[i];
                    object             item  = (child as OnlineMapsJSONObject).Deserialize(listType, members);
                    try
                    {
                        MethodInfo methodInfo = OnlineMapsReflectionHelper.GetMethod(type, "Add");
                        if (methodInfo != null)
                        {
                            methodInfo.Invoke(v, new[] { item });
                        }
                    }
                    catch
                    {
                    }
                }
            }
            else
            {
                for (int i = 0; i < _count; i++)
                {
                    OnlineMapsJSONItem child = array[i];
                    object             item  = child.Deserialize(listType);
                    try
                    {
                        MethodInfo methodInfo = OnlineMapsReflectionHelper.GetMethod(type, "Add");
                        if (methodInfo != null)
                        {
                            methodInfo.Invoke(v, new[] { item });
                        }
                    }
                    catch
                    {
                    }
                }
            }

            return(v);
        }


        return(null);
    }
Esempio n. 9
0
    public override object Value(Type t)
    {
        if (_type == ValueType.NULL || _value == null)
        {
            if (OnlineMapsReflectionHelper.IsValueType(t))
            {
                return(Activator.CreateInstance(t));
            }
            return(null);
        }

        if (t == typeof(string))
        {
            return(Convert.ChangeType(_value, t));
        }

        if (_type == ValueType.BOOLEAN)
        {
            if (t == typeof(bool))
            {
                return(Convert.ChangeType(_value, t));
            }
        }
        else if (_type == ValueType.DOUBLE)
        {
            if (t == typeof(double))
            {
                return(Convert.ChangeType(_value, t));
            }
            if (t == typeof(float))
            {
                return(Convert.ChangeType((double)_value, t));
            }
        }
        else if (_type == ValueType.LONG)
        {
            if (t == typeof(long))
            {
                return(Convert.ChangeType(_value, t));
            }
            if (t == typeof(int))
            {
                return(Convert.ChangeType((long)_value, t));
            }
            if (t == typeof(float))
            {
                return(Convert.ChangeType((long)_value, t));
            }
            if (t == typeof(double))
            {
                return(Convert.ChangeType((long)_value, t));
            }
        }
        else if (_type == ValueType.STRING)
        {
            MethodInfo method = OnlineMapsReflectionHelper.GetMethod(t, "Parse", new[] { typeof(string) });
            if (method != null)
            {
                return(method.Invoke(null, new[] { _value }));
            }
            return(null);
        }
        StringBuilder builder = new StringBuilder();

        ToJSON(builder);
        throw new InvalidCastException(t.FullName + "\n" + builder);
    }
Esempio n. 10
0
        public override void Append(StringBuilder builder)
        {
            base.Append(builder);

            builder.Append("&coordinates=");
            for (int i = 0; i < coordinates.Length; i++)
            {
                if (i > 0)
                {
                    builder.Append("|");
                }
                OnlineMapsVector2d c = coordinates[i];
                builder.Append(c.x).Append(",").Append(c.y);
            }

            builder.Append("&profile=").Append(OnlineMapsReflectionHelper.GetEnumDescription(profile));
            if (preference.HasValue)
            {
                builder.Append("&preference=").Append(preference);
            }
            if (units.HasValue)
            {
                builder.Append("&units=").Append(units);
            }
            if (!string.IsNullOrEmpty(language))
            {
                builder.Append("&language=").Append(language);
            }
            if (geometry.HasValue)
            {
                builder.Append("&geometry=").Append(geometry.Value);
            }
            if (geometry_format.HasValue)
            {
                builder.Append("&geometry_format=").Append(geometry_format.Value);
            }
            if (geometry_simplify.HasValue)
            {
                builder.Append("&geometry_simplify=").Append(geometry_simplify.Value);
            }
            if (instructions.HasValue)
            {
                builder.Append("&instructions=").Append(instructions.Value);
            }
            if (instructions_format.HasValue)
            {
                builder.Append("&instructions_format=").Append(instructions_format.Value);
            }
            if (elevation.HasValue)
            {
                builder.Append("&elevation=").Append(elevation.Value);
            }

            if (extra_info != null)
            {
                builder.Append("&extra_info=");
                for (int i = 0; i < extra_info.Length; i++)
                {
                    if (i > 0)
                    {
                        builder.Append("|");
                    }
                    builder.Append(extra_info[i]);
                }
            }

            if (!string.IsNullOrEmpty(options))
            {
                builder.Append("&options=").Append(options);
            }
        }
    /// <summary>
    /// Serializes an object to JSON.
    /// </summary>
    /// <param name="obj">Object</param>
    /// <returns>JSON</returns>
    public static OnlineMapsJSONItem Serialize(object obj)
    {
#if !UNITY_WP_8_1 || UNITY_EDITOR
        if (obj == null || obj is DBNull)
        {
            return(new OnlineMapsJSONValue(obj, OnlineMapsJSONValue.ValueType.NULL));
        }
#else
        if (obj == null)
        {
            return(new OnlineMapsJSONValue(obj, OnlineMapsJSONValue.ValueType.NULL));
        }
#endif
        if (obj is string || obj is bool || obj is int || obj is long || obj is short || obj is float || obj is double)
        {
            return(new OnlineMapsJSONValue(obj));
        }
        if (obj is UnityEngine.Object)
        {
            if (!(obj is Component || obj is ScriptableObject))
            {
                return(new OnlineMapsJSONValue((obj as UnityEngine.Object).GetInstanceID()));
            }
        }
        if (obj is IDictionary)
        {
            IDictionary          d          = obj as IDictionary;
            OnlineMapsJSONObject dv         = new OnlineMapsJSONObject();
            ICollection          keys       = d.Keys;
            ICollection          values     = d.Values;
            IEnumerator          keysEnum   = keys.GetEnumerator();
            IEnumerator          valuesEnum = values.GetEnumerator();
            while (keysEnum.MoveNext() && valuesEnum.MoveNext())
            {
                object k = keysEnum.Current;
                object v = valuesEnum.Current;

                dv.Add(k as string, Serialize(v));
            }
            return(dv);
        }
        if (obj is IEnumerable)
        {
            IEnumerable         v     = (IEnumerable)obj;
            OnlineMapsJSONArray array = new OnlineMapsJSONArray();
            foreach (var item in v)
            {
                array.Add(Serialize(item));
            }
            return(array);
        }

        OnlineMapsJSONObject o    = new OnlineMapsJSONObject();
        Type         type         = obj.GetType();
        BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Public;
        if (OnlineMapsReflectionHelper.CheckIfAnonymousType(type))
        {
            bindingFlags |= BindingFlags.NonPublic;
        }
        IEnumerable <FieldInfo> fields = OnlineMapsReflectionHelper.GetFields(type, bindingFlags);
        foreach (FieldInfo field in fields)
        {
            string fieldName = field.Name;
            if (field.Attributes == (FieldAttributes.Private | FieldAttributes.InitOnly))
            {
                fieldName = fieldName.Trim('<', '>');
            }
            o.Add(fieldName, Serialize(field.GetValue(obj)));
        }
        return(o);
    }