public override IObjectBuilder CreateObjectBuilder(ITypeBuilderRegistry registry)
 {
     throw new InvalidClassForDeserializationException(
         string.Format(
             "Cannot deserialilze json into dictionary of type {0}. Dictionary key type must be string.",
             _dictionaryType));
 }
Ejemplo n.º 2
0
        public object Parse(ITypeBuilderRegistry registry, ITypeBuilder builder, object instanceState)
        {
            SkipWhitespace();

            var c = Peek();
            switch (c)
            {
                case '{':
                    return ParseObject(registry, builder, instanceState);
                case '[':
                    return ParserArray(registry, builder, instanceState);
                case '\"':
                    return ParseString(registry, builder);
                case 't':
                    return ParseTrue(registry, builder);
                case 'f':
                    return ParseFalse(registry, builder);
                case 'n':
                    return ParseNull(registry, builder);
                default:
                    if (char.IsDigit((char) c) || (c == '-'))
                    {
                        return ParseNumber(registry, builder);
                    }
                    break;
            }
            throw CreateException("Expected Json at ({1},{2})", c, Line, Column);
        }
Ejemplo n.º 3
0
 public object CreateNewObject(ITypeBuilderRegistry registry, object instanceState)
 {
     if (instanceState is IJsonObject)
     {
         return instanceState as IJsonObject;
     }
     return new JsonObject();
 }
Ejemplo n.º 4
0
 public virtual object CreateDateTime(ITypeBuilderRegistry registry, DateTime value, object sourceValue)
 {
     if (sourceValue is string)
     {
         return new JsonDateAndString(value, sourceValue as string);
     }
     return new JsonDate(value);
 }
 public object CreateString(ITypeBuilderRegistry registry, string value)
 {
     string interned;
     if (!_interned.TryGetValue(value, out interned))
     {
         interned = value;
         _interned.Add(value, interned);
     }
     return interned;
 }
 public object CreateNumber(ITypeBuilderRegistry registry, double value)
 {
     return _convert(_inner.CreateNumber(registry, value));
 }
 public object CreateBool(ITypeBuilderRegistry registry, bool value)
 {
     return _convert(_inner.CreateBool(registry, value));
 }
Ejemplo n.º 8
0
 public object CreateNewArray(ITypeBuilderRegistry registry, object instanceState)
 {
     return new JsonArray();
 }
 public object CreateString(ITypeBuilderRegistry registry, string value)
 {
     return _convert(_inner.CreateString(registry, value));
 }
Ejemplo n.º 10
0
 protected object ParseNull(ITypeBuilderRegistry registry, ITypeBuilder builder)
 {
     Match("null");
     return builder.CreateNull(registry);
 }
Ejemplo n.º 11
0
        protected object ParserArray(ITypeBuilderRegistry registry, ITypeBuilder builder, object instanceState)
        {
            Match('[');
            SkipWhitespace();
            var arrayBuilder = builder.CreateArrayBuilder(registry);
            var array = arrayBuilder.CreateNewArray(registry, instanceState);

            while (Peek() != ']')
            {
                arrayBuilder.AddElement(array, Parse(registry, arrayBuilder.GetElementBuilder(registry), null));
                SkipWhitespace();

                if (!TryMatch(','))
                {
                    break;
                }
                SkipWhitespace();
            }
            Match(']');

            return arrayBuilder.GetArray(array);
        }
Ejemplo n.º 12
0
 public object CreateBool(ITypeBuilderRegistry registry, bool value)
 {
     return value;
 }
Ejemplo n.º 13
0
 protected object ParseFalse(ITypeBuilderRegistry registry, ITypeBuilder builder)
 {
     Match("false");
     return builder.CreateBool(registry, false);
 }
Ejemplo n.º 14
0
 public object CreateNumber(ITypeBuilderRegistry registry, long value)
 {
     return (int) value;
 }
Ejemplo n.º 15
0
 public object CreateNumber(ITypeBuilderRegistry registry, double value)
 {
     return value;
 }
Ejemplo n.º 16
0
 public object CreateString(ITypeBuilderRegistry registry, string value)
 {
     return value;
 }
Ejemplo n.º 17
0
 public IArrayBuilder CreateArrayBuilder(ITypeBuilderRegistry registry)
 {
     return _arrayBuilder;
 }
Ejemplo n.º 18
0
 public IObjectBuilder CreateObjectBuilder(ITypeBuilderRegistry registry)
 {
     return _dictionaryBuilder;
 }
Ejemplo n.º 19
0
 public object CreateDateTime(ITypeBuilderRegistry registry, DateTime value, object sourceValue)
 {
     return _convert(_inner.CreateDateTime(registry, value, sourceValue));
 }
Ejemplo n.º 20
0
 public object CreateDateTime(ITypeBuilderRegistry registry, DateTime value, object sourceValue)
 {
     return value;
 }
Ejemplo n.º 21
0
 public object CreateNull(ITypeBuilderRegistry registry)
 {
     return _convert(_inner.CreateNull(registry));
 }
Ejemplo n.º 22
0
        protected object ParseObject(ITypeBuilderRegistry registry, ITypeBuilder builder, object instanceState)
        {
            Match('{');
            SkipWhitespace();

            var objectBuilder = builder.CreateObjectBuilder(registry);
            var @object = objectBuilder.CreateNewObject(registry, instanceState);

            while (Peek() != '}')
            {
                var memberName = ParseString();
                SkipWhitespace();
                Match(':');

                var memberState = objectBuilder.GetMemberState(memberName, @object);
                objectBuilder.SetMember(memberName, @object,
                                        Parse(registry, objectBuilder.GetMemberBuilder(registry, memberName),
                                              memberState));

                SkipWhitespace();

                if (!TryMatch(','))
                {
                    break;
                }
                SkipWhitespace();
            }
            Match('}');
            return objectBuilder.GetObject(@object);
        }
Ejemplo n.º 23
0
 protected object ParseTrue(ITypeBuilderRegistry registry, ITypeBuilder builder)
 {
     Match("true");
     return builder.CreateBool(registry, true);
 }
Ejemplo n.º 24
0
 public virtual IObjectBuilder CreateObjectBuilder(ITypeBuilderRegistry registry)
 {
     return new JsonObjectBuilder();
 }
Ejemplo n.º 25
0
        protected object ParseString(ITypeBuilderRegistry registry, ITypeBuilder builder)
        {
            var s = ParseString();

            var dt = JsonFormats.TryParseDateTime(s);
            return dt.HasValue ? builder.CreateDateTime(registry, dt.Value, s) : builder.CreateString(registry, s);
        }
Ejemplo n.º 26
0
 public IArrayBuilder CreateArrayBuilder(ITypeBuilderRegistry registry)
 {
     var builder = _inner.CreateArrayBuilder(registry);
     return builder == null ? null : new ConvertingArrayBuilder(builder, _convert);
 }
Ejemplo n.º 27
0
 public object CreateNull(ITypeBuilderRegistry registry)
 {
     return null;
 }
Ejemplo n.º 28
0
 public ITypeBuilder GetElementBuilder(ITypeBuilderRegistry registry)
 {
     return this;
 }
Ejemplo n.º 29
0
        /*
         * number = [ minus ] int [ frac ] [ exp ]
         * decimal-point = %x2E       ; .
         * digit1-9 = %x31-39         ; 1-9
         * e = %x65 / %x45            ; e E
         * exp = e [ minus / plus ] 1*DIGIT
         * frac = decimal-point 1*DIGIT
         * int = zero / ( digit1-9 *DIGIT )
         * minus = %x2D               ; -
         * plus = %x2B                ; +
         * zero = %x30                ; 0
         */

        private object ParseNumber(ITypeBuilderRegistry registry, ITypeBuilder builder)
        {
            var startLine = Line;
            var startColumn = Column;
            var sb = new StringBuilder();
            if (Peek() == '-')
            {
                sb.Append(Next());
            }
            var hasInteger = false;
            while (char.IsDigit((char) Peek()))
            {
                sb.Append(Next());
                hasInteger = true;
            }
            if (!hasInteger)
            {
                throw CreateExpectedNumberException(startLine, startColumn);
            }

            if (Peek() != '.')
            {
                long intValue;
                if (!long.TryParse(sb.ToString(), out intValue))
                {
                    throw CreateExpectedNumberException(startLine, startColumn);
                }
                return builder.CreateNumber(registry, intValue);
            }

            sb.Append(Next());
            var hasFrac = false;
            while (char.IsDigit((char) Peek()))
            {
                sb.Append(Next());
                hasFrac = true;
            }
            if (!hasFrac)
            {
                throw CreateExpectedNumberException(startLine, startColumn);
            }

            if ("eE".IndexOf((char) Peek()) >= 0)
            {
                sb.Append(Next());

                if ("+-".IndexOf((char) Peek()) >= 0)
                {
                    sb.Append(Next());
                }
                var hasExp = false;
                while (char.IsDigit((char) Peek()))
                {
                    sb.Append(Next());
                    hasExp = true;
                }
                if (!hasExp)
                {
                    throw CreateExpectedNumberException(startLine, startColumn);
                }
            }
            double doubleValue;

            if (!double.TryParse(sb.ToString(),
                                 NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint |
                                 NumberStyles.AllowExponent,
                                 JsonFormats.DoubleFormat, out doubleValue))
            {
                throw CreateExpectedNumberException(startLine, startColumn);
            }
            return builder.CreateNumber(registry, doubleValue);
        }
Ejemplo n.º 30
0
 public static Func<ITypeBuilder> CreateTypeBuilderFactory(ITypeBuilderRegistry registry)
 {
     var builder = new SystemObjectBuilder();
     return () => builder;
 }