将字符串反序列化为 Google TokenResponse

Deserialize String to Google TokenResponse

我正在编写一个小应用程序,它必须使用 google 对用户进行身份验证并获取他们的日历。

如果用户接受请求,Google 给我们一个 RequestToken,它有一个 RefreshToken。 我们使用 Diamto DatabaseDataStore 中的示例将 RefreshToken 存储在我们的数据库中。

为了将 RefreshToken 存储在数据库中,我这样做了:

var serialized = NewtonsoftJsonSerializer.Instance.Serialize(value);

好的。它工作正常,但是当我在数据库中查找 RefreshToken 时,它必须反序列化。为此,我使用

TaskCompletionSource<T> tcs = new TaskCompletionSource<T>();
....
tcs.SetResult(NewtonsoftJsonSerializer.Instance.Deserialize<T>(refreshToken));

RefreshToken 是来自数据库的字符串。

在反序列化时,出现以下错误:

Could not cast or convert from System.String to Google.Apis.Auth.OAuth2.Responses.TokenResponse.

希望大家能告诉我问题出在哪里

看来您可以使用新字符串创建一个新的 TokenResponse 实例,如下所示:

var tokenResponse = new TokenResponse
{
    RefreshToken = refreshToken // or you will have to deserialize the string first
}

然后您可以继续按原样使用该库,令牌响应没有访问令牌,因此该库将尝试使用您刚从数据库中获得的刷新令牌来刷新您的访问令牌。

TokenResponse 代码位于: https://github.com/google/google-api-dotnet-client/blob/master/Src/GoogleApis.Auth/OAuth2/Responses/TokenResponse.cs#L49

可在此处获取重用令牌响应的代码: https://github.com/google/google-api-dotnet-client/blob/master/Src/GoogleApis.Auth/OAuth2/AuthorizationCodeInstalledApp.cs#L67