- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 JSON 字符串
{
"AccessToken":"myAccessToken",
"TokenType":"Bearer",
"ExpiresInSeconds":"3600",
"RefreshToken":"myRefreshToken",
"Scope":"myScopes",
"Issued":"05/07/2019 16:51:53",
"IssuedUtc":"05/07/2019 14:51:53"
}
我正在使用的对象类(Google API TokenResponse
类)
public class TokenResponse
{
public string AccessToken { get; set; }
public string TokenType { get; set; }
public long? ExpiresInSeconds { get; set; }
public string RefreshToken { get; set; }
public string Scope { get; set; }
public string IdToken { get; set; }
public DateTime Issued { get; set; }
public DateTime IssuedUtc { get; set; }
}
我正在使用 Json.NET 将 JSON 字符串转换成这样的对象
string jsonToken = await System.IO.File.ReadAllTextAsync(pathJsonToken);
TokenResponse token = JsonConvert.DeserializeObject<TokenResponse>(jsonToken);
jsonToken
值是我上面写的JSON字符串,转换成TokenResponse
时只有字段Issued
, IssuedUtc
和 Scope
被填充。
起初我以为错误是由于缺少字段IdToken
引起的,但我尝试使用我定义的类,它与Google的TokenResponse
相同,并且它传递所有值(显然 IdToken
除外)。
我想做的是使用已经存在的类,但我无法让它工作。
我错过了什么?
最佳答案
您在问题中显示的 TokenResponse
类与您提供的 JSON 配合使用效果很好。 (演示 here)
现在看看 source code对于同一类的谷歌版本。这是精简版:
public class TokenResponse
{
[Newtonsoft.Json.JsonPropertyAttribute("access_token")]
public string AccessToken { get; set; }
[Newtonsoft.Json.JsonPropertyAttribute("token_type")]
public string TokenType { get; set; }
[Newtonsoft.Json.JsonPropertyAttribute("expires_in")]
public Nullable<long> ExpiresInSeconds { get; set; }
[Newtonsoft.Json.JsonPropertyAttribute("refresh_token")]
public string RefreshToken { get; set; }
[Newtonsoft.Json.JsonPropertyAttribute("scope")]
public string Scope { get; set; }
[Newtonsoft.Json.JsonPropertyAttribute("id_token")]
public string IdToken { get; set; }
[Obsolete("Use IssuedUtc instead")]
[Newtonsoft.Json.JsonPropertyAttribute(Order = 1)]
public DateTime Issued
{
get { return IssuedUtc.ToLocalTime(); }
set { IssuedUtc = value.ToUniversalTime(); }
}
[Newtonsoft.Json.JsonPropertyAttribute(Order = 2)]
public DateTime IssuedUtc { get; set; }
...
}
现在应该清楚问题是什么了:他们的类需要与您正在使用的不同的 JSON 属性名称。 JSON 应如下所示:
{
"access_token": "myAccessToken",
"token_type": "Bearer",
"expires_in": "3600",
"refresh_token": "myRefreshToken",
"scope": "myScopes",
"Issued": "05/07/2019 16:51:53",
"IssuedUtc": "05/07/2019 14:51:53"
}
此响应格式在 section 5.1 of the OAuth 2.0 Spec 中有详细记录(RFC 6749)。但请注意,规范仅定义了前五个属性; Issued
和 IssuedUtc
似乎是 Google 添加的额外属性(前者在代码中标记为已过时)。
这是一个使用正确的 JSON 和 Google 的 TokenResponse
类的工作演示: https://dotnetfiddle.net/2wXojV
关于c# - 将 JSON 字符串(无空值)转换为 Google 的 OAuth API TokenResponse 类时的空字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913230/
我正在开发一个使用 Azure B2C 进行策略和用户管理的 Angular 10 应用程序。我在 Azure Active Directory 中将我的应用注册设置为单页应用,而未选中隐式选项。我正
Google API V3 OAUTH2 问题报告 下面的 GoogleWebAuthorizationBroker.AuthorizeAsync 代码在我的 Windows 8.1 上运行良好。当我
我的 JSON 字符串 { "AccessToken":"myAccessToken", "TokenType":"Bearer", "ExpiresInSeconds":"3600",
我是一名优秀的程序员,十分优秀!