Exemple #1
0
        object ParseObject(Type typeHint)
        {
            var adapter = JsonAdapter.ForType(typeHint);
            var next    = Peek();

            if (next != '{')
            {
                Err("expected object literal");
            }

            Consume();
            var result = Activator.CreateInstance(typeHint);

            next = Peek();
            while (next != '}')
            {
                var key = ParseString();
                Consume(':');

                var value = Parse(adapter.GetValueType(result, key));
                adapter.SetKey(result, key, value);

                next = Peek();
                if (next != '}')
                {
                    Consume(',');
                }
            }

            Consume('}');
            return(result);
        }
Exemple #2
0
        object ParseArray(Type typeHint)
        {
            var adapter = JsonAdapter.ForType(typeHint);
            var next    = Peek();

            if (next != '[')
            {
                Err("expected array literal");
            }

            Consume();
            var result = Activator.CreateInstance(GetWorkingType(typeHint));

            int i = 0;

            next = Peek();
            while (next != ']')
            {
                var value = Parse(adapter.GetValueType(result, i.ToString()));
                adapter.SetKey(result, i.ToString(), value);

                i++;
                next = Peek();
                if (next != ']')
                {
                    Consume(',');
                }
            }
            Consume(']');

            if (typeHint.IsArray)
            {
                typeHint = typeHint.GetElementType();
                var list  = (IList)result;
                var array = Array.CreateInstance(typeHint, i);
                for (var j = 0; j < i; j++)
                {
                    array.SetValue(Convert.ChangeType(list [j], typeHint), j);
                }
                return(array);
            }
            return(result);
        }
Exemple #3
0
 public void WriteValue(object value)
 {
     WriteCommaIfNecessary();
     if (value == null)
     {
         buffer.Append("null");
     }
     else if (value is string)
     {
         WriteString((string)value);
     }
     else if (value is ValueType)
     {
         // FIXME: enums?
         buffer.Append(value.ToString().ToLowerInvariant());
     }
     else
     {
         JsonAdapter.ForType(value.GetType()).WriteJson(value, this);
     }
     next_needs_comma = true;
 }
Exemple #4
0
 public static void Register(Type type, JsonAdapter adapter)
 {
     lock (adapters)
         adapters [type] = adapter;
 }
Exemple #5
0
 public static void Register(Type type, JsonAdapter adapter)
 {
     lock (adapters)
         adapters [type] = adapter;
 }
Exemple #6
0
 public static void Register(Type type, JsonAdapter adapter)
 {
     if (adapter == null)
         throw new ArgumentNullException ("adapter");
     lock (adapters)
         adapters.Insert (0, type, adapter);
 }