public override void Write(Utf8JsonWriter writer, TokenResponse value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WriteString("access_token", value.AccessToken); writer.WriteNumber("expires_in", Math.Floor((value.ExpiresAt - DateTime.UtcNow).TotalSeconds)); writer.WriteString("token_type", TokenResponse.TokenType); writer.WriteString("scope", ScopeUtility.ToScopeString(value.Scope)); writer.WriteString("refresh_token", value.RefreshToken); writer.WriteEndObject(); }
public override TokenResponse Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) { throw new JsonException(); } var tokenResponse = new TokenResponse(); while (reader.Read()) { if (reader.TokenType == JsonTokenType.PropertyName) { var propertyName = reader.ValueSpan; if (!reader.Read()) { throw new JsonException(); } if (propertyName.SequenceEqual(ACCESS_TOKEN)) { tokenResponse.AccessToken = reader.GetString(); } else if (propertyName.SequenceEqual(REFRESH_TOKEN)) { tokenResponse.RefreshToken = reader.GetString(); } else if (propertyName.SequenceEqual(EXPIRES_IN)) { tokenResponse.ExpiresAt = DateTime.UtcNow.AddSeconds(reader.GetInt32()); } else if (propertyName.SequenceEqual(SCOPE)) { tokenResponse.Scope = ScopeUtility.ParseScopeString(reader.GetString()); } } else if (reader.TokenType == JsonTokenType.EndObject) { return(tokenResponse); } } throw new JsonException(); }