反序列化 JSON 凭证数据 C# Google 工作表 API 时出错

Error deserializing JSON credential Data C# Google Sheets API

我目前正在尝试使用服务帐户访问 GoogleSheets API - 我遇到的问题是我的 .json 文件。

这是我的代码:

    try
    {
        string[] scopes = new string[] { SheetsService.Scope.Spreadsheets, SheetsService.Scope.SpreadsheetsReadonly }; // Put your scopes here

        var stream = new FileStream("my_application_secret.json", FileMode.Open, FileAccess.Read);

        var credential = GoogleCredential.FromStream(stream);
        credential = credential.CreateScoped(scopes);

        SheetsService service = new SheetsService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "myApplication",
        });
        return service;
    }
    catch (Exception ex)
    {
        Console.WriteLine("Create service account myApplicationServiceAccount failed : " + ex.Message);
        throw new Exception("Create ServiceAccount Failed : ", ex);
    }

这引发了我的错误:

Create service account myApplicationServiceAccount failed : Error deserializing JSON credential data.

但我在网上找到的所有内容都表明我上面的内容应该有效。

我还需要处理此 .json 文件吗?

尝试使用 Newtonsoft.Json 库反序列化对象 http://www.newtonsoft.com/json

return Newtonsoft.Json.JsonConvert.DeserializeObject<SheetsService>(service);

但错误是在反序列化 JSON 凭据数据时,所以这可能会有所帮助: credential = Newtonsoft.Json.JsonConvert.DeserializeObject<credential.CreateScoped>(scopes);

您可以查看此 related GitHub thread。给定的解决方法是:

install-package Microsoft.Bcl.Build
install-package Microsoft.Bcl.Async
install-package Microsoft.Net.Http

此外,您可以在 C# 中关注此 tutorial 关于 JSON Serialization/Deserialization 的内容,看看您是否遗漏了什么。

事实证明 - 因为我支持旧版本的 .NET(4 及以下版本),所以我使用的是 Google 工作表 API.[=10= 的稍旧版本]

但是 Newtonsoft.JSON 软件包也已过时。更新了它,现在可以使用了。