Exemple #1
0
        /// <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);
        }
Exemple #2
0
 private JwtDescriptorBuilder AddHeader(ReadOnlySpan <byte> utf8Name, string value)
 {
     _header.Add(new JwtProperty(utf8Name, value));
     return(this);
 }