private SmileType ReadType() { SmileType type = SmileType.Parse(_reader.ReadByte()); //System.Diagnostics.Debug.WriteLine(" propertyType: {0}, {1}, {2}", (byte)type.TypeClass, type.Value, type.TypeClass); return(type); }
private bool ReadNormal() { switch (CurrentState) { case State.Start: { JsonToken token = (!_readRootValueAsArray) ? JsonToken.StartObject : JsonToken.StartArray; SmileType type = (!_readRootValueAsArray) ? SmileType.NewObject() : SmileType.NewArray(); _currentElementType = ReadType(); type = _currentElementType; SetToken(token); PushContext(type); return(true); } case State.Complete: case State.Closed: return(false); case State.Property: { ReadType(_currentElementType); return(true); } case State.ObjectStart: case State.ArrayStart: case State.PostValue: { SmileType context = _currentContext; if (context == null) { return(false); } byte keyType = this.ReadByte(); if (keyType == (byte)0xF9 || keyType == (byte)0xFB) { PopContext(); JsonToken endToken = (context.TypeClass == SmileTypeClass.START_OBJECT) ? JsonToken.EndObject : JsonToken.EndArray; SetToken(endToken); return(true); } if (_currentContext.TypeClass == SmileTypeClass.START_ARRAY) { _currentElementType = SmileType.Parse(keyType); ReadType(_currentElementType); } else { SetToken(JsonToken.PropertyName, ReadElement(keyType)); } return(true); } case State.ConstructorStart: break; case State.Constructor: break; case State.Error: break; case State.Finished: break; default: throw new ArgumentOutOfRangeException(); } return(false); }