protected Value AsValueJs(Value data)
 {
     switch (_tlast)
     {
         case JsToken.String: data.String = AtString(); break;
         case JsToken.Int: data.Bigint = GetLongJs(); break;
         case JsToken.Number:
             data.Number = double.Parse(AtString(), System.Globalization.NumberStyles.Float); break;
         case JsToken.False: data.Bool = false; break;
         case JsToken.True: data.Bool = true; break;
         case JsToken.Null: data.ClearKind(); break;
         case JsToken.ObjectStart: data.Members = AsStructJs(new Struct()); break;
         case JsToken.ArrayStart:
             var list = new ListValue();
             for (GetValue(); _tlast != JsToken.ArrayEnd;)
             {
                 AsValueJs(list.AddValues(new Value()));
                 if ((_tlast = Next()) == JsToken.Comma)
                     GetValue();
                 else if (_tlast != JsToken.ArrayEnd && (int)_tlast < (int)JsToken.ObjectStart)
                     Expected("value");
             }
             data.Elements = list;
             break;
         default:
             Expected("json data element"); break;
     }
     return data;
 }