示例#1
0
        void _writeObject(object obj, EasyJsonWriter writer)
        {
            if (obj == null)
            {
                writer.WriteJsonValue(null);
                return;
            }

            if (++_depth > MAX_DEPTH)
            {
                throw new EasyJsonException("Class nested level is beyond max depth, check whether there is a loop");
            }

            Type t = obj.GetType();

            EasyJsonController controller = GetController(t);

            if (controller != null)
            {
                writer.WriteJsonValue(controller.ObjectToJson(obj));
                return;
            }

            writer.WriteObjectStart();

            JsonClassMetadata metadata = _getMetadata(t);

            foreach (KeyValuePair <string, FieldInfo> kv in metadata.Fields)
            {
                _writeObject(kv.Key, kv.Value.GetValue(obj), writer);
            }
            foreach (KeyValuePair <string, PropertyInfo> kv in metadata.Properties)
            {
                MethodInfo getMethod = kv.Value.GetGetMethod();
                if (getMethod == null)
                {
                    throw new EasyJsonException("Fail to access getter of " + kv.Value.Name);
                }

                if (getMethod.GetParameters().Length > 0)
                {
                    continue;
                }

                _writeObject(kv.Key, getMethod.Invoke(obj, null), writer);
            }

            if (metadata.IsDynamicType)
            {
                _writeObject(DYNAMIC_TYPE_NAME, t, writer);
            }

            writer.WriteObjectEnd();
            writer.WriteJsonValue("");
        }
示例#2
0
        public override string ObjectToJson(object obj)
        {
            Type ut = Enum.GetUnderlyingType(obj.GetType());
            EasyJsonController controller = GetController(ut);

            if (controller == null)
            {
                throw new EasyJsonException("Doesn't support Enum parser whose underlying type is " + ut.ToString());
            }

            return(controller.ObjectToJson(Convert.ChangeType(obj, ut)));
        }
示例#3
0
        public override string ObjectToJson(object obj)
        {
            if (obj == null)
            {
                return(null);
            }

            Type ut = Nullable.GetUnderlyingType(obj.GetType());
            EasyJsonController controller = GetController(ut);

            if (controller == null)
            {
                throw new EasyJsonException("Doesn't support JSON parser for Nullable " + ut.ToString());
            }

            return(controller.ObjectToJson(obj));
        }
示例#4
0
        public static string ToJson(object obj)
        {
            EasyJsonController controller = GetMainController();

            return(controller.ObjectToJson(obj));
        }