/// <summary> /// Use the <paramref name="reader"/> as JSON input and returns a <see cref="JwtObject"/>. /// </summary> /// <param name="reader"></param> public static JwtObject ReadJsonObject(ref Utf8JsonReader reader) { var current = new JwtObject(); while (reader.Read() && reader.TokenType is JsonTokenType.PropertyName) { var name = reader.ValueSpan /* reader.HasValueSequence ? reader.ValueSequence.ToArray() : reader.ValueSpan */; reader.Read(); var type = reader.TokenType; switch (type) { case JsonTokenType.StartObject: current.Add(name, ReadJsonObject(ref reader)); break; case JsonTokenType.StartArray: current.Add(name, ReadJsonArray(ref reader)); break; case JsonTokenType.String: current.Add(name, reader.GetString()); break; case JsonTokenType.True: current.Add(name, true); break; case JsonTokenType.False: current.Add(name, false); break; case JsonTokenType.Null: current.Add(name); break; case JsonTokenType.Number: if (reader.TryGetInt64(out long longValue)) { current.Add(name, longValue); } else { current.Add(name, reader.GetDouble()); } break; default: ThrowHelper.ThrowFormatException_MalformedJson(); break; } } if (!(reader.TokenType is JsonTokenType.EndObject)) { ThrowHelper.ThrowFormatException_MalformedJson(); } return(current); }
private JwtDescriptorBuilder AddHeader(ReadOnlySpan <byte> utf8Name, string value) { _header.Add(new JwtProperty(utf8Name, value)); return(this); }