gpt4 book ai didi

c# - 将 JSON 字符串(无空值)转换为 Google 的 OAuth API TokenResponse 类时的空字段值

转载 作者:太空宇宙 更新时间:2023-11-03 12:01:10 27 4
gpt4 key购买 nike

我的 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, IssuedUtcScope 被填充。

起初我以为错误是由于缺少字段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)。但请注意,规范仅定义了前五个属性; IssuedIssuedUtc 似乎是 Google 添加的额外属性(前者在代码中标记为已过时)。

这是一个使用正确的 JSON 和 Google 的 TokenResponse 类的工作演示: https://dotnetfiddle.net/2wXojV

关于c# - 将 JSON 字符串(无空值)转换为 Google 的 OAuth API TokenResponse 类时的空字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com