public override string ObjectToJson(object obj)
        {
            if (obj == null)
            {
                return(null);
            }

            IDictionary      dict         = obj as IDictionary;
            EasyJsonWriter   writer       = new EasyJsonWriter();
            JsonItemMetadata itemMetadata = _getItemMetadata(obj.GetType());

            ObjectToJsonFunc keyFunc = _stringKeyToJsonName;

            if (itemMetadata.IndexType != typeof(string))
            {
                keyFunc = base.ObjectToJson;
            }

            writer.WriteObjectStart();
            foreach (DictionaryEntry entry in dict)
            {
                writer.WriteName(JsonUtil.Escape(keyFunc(entry.Key)));
                //writer.WriteJsonValue(base.ObjectToJson(entry.Value));
                writer.WriteValue(entry.Value);
            }
            writer.WriteObjectEnd();

            return(writer.ToString());
        }
        public override object JsonToObject(EasyJsonData data, Type t)
        {
            if (data.IsNullValue)
            {
                return(null);
            }

            if (data.Type != EasyJsonDataType.JsonObject)
            {
                throw new EasyJsonException("Invalid JSON data type " + data.Type.ToString() + ", JSON OBJECT expected");
            }

            IDictionary      inst     = Activator.CreateInstance(t) as IDictionary;
            JsonItemMetadata metadata = _getItemMetadata(t);

            JsonToObjectFunc keyFunc = _stringDataToKey;

            if (metadata.IndexType != typeof(string))
            {
                keyFunc = _jsonDataToKey;
            }

            foreach (string name in data.Names)
            {
                object key   = keyFunc(name, metadata.IndexType);
                object value = base.JsonToObject(data[name], metadata.ElementType);

                inst.Add(key, value);
            }

            return(inst);
        }
        JsonItemMetadata _getItemMetadata(Type t)
        {
            JsonItemMetadata metadata = null;

            _metadataCache.TryGetValue(t, out metadata);
            if (metadata == null)
            {
                metadata          = new JsonItemMetadata(t);
                _metadataCache[t] = metadata;
            }

            return(metadata);
        }
Esempio n. 4
0
        public override object JsonToObject(EasyJsonData data, Type t)
        {
            if (data.IsNullValue)
            {
                return(null);
            }

            if (data.Type != EasyJsonDataType.JsonArray)
            {
                throw new EasyJsonException("Invalid JSON data type " + data.Type.ToString() + ", JSON ARRAY expected");
            }

            JsonItemMetadata metadata = _getItemMetadata(t);
            IList            inst     = Activator.CreateInstance(t) as IList;

            for (int i = 0; i < data.Count; ++i)
            {
                object element = base.JsonToObject(data[i], metadata.ElementType);
                inst.Add(element);
            }

            return(inst);
        }