将字符串反序列化为Google TokenResponse

时间:2015-04-14 12:49:52

标签: c# google-api json.net google-api-dotnet-client

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

如果用户接受请求,Google会向我们提供一个具有RefreshToken的RequestToken。 我们使用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是数据库中的字符串。

在反序列化中,我收到以下错误:

  

无法从System.String转换或转换为   Google.Apis.Auth.OAuth2.Responses.TokenResponse。

我希望,任何人都可以告诉我问题在哪里。

1 个答案:

答案 0 :(得分:1)

看起来你可以用新字符串创建一个新的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