获取错误System.InvalidOperationException:反序列化JSON凭据数据时出错

问题描述 投票:-1回答:2

我试图从xamarin C #android应用程序代码调用google cloud vision api。我已经设置了环境变量,但仍然无法调用api。所以我决定通过传递凭证json文件来调用它,但现在我收到错误反序列化JSON凭证数据

这是我的代码

string jsonPath = @"C:/Users/abcde/Documents/AndroidApp/My Project-d38b212eadaf.json";

            var credential = GoogleCredential.FromJson(jsonPath);
            var channel = new Grpc.Core.Channel(ImageAnnotatorClient.DefaultEndpoint.ToString(), credential.ToChannelCredentials());
            var client = ImageAnnotatorClient.Create(channel);

            var image = Image.FromFile(@"C:/Users/abcde/Documents/AndroidApp/bg.jpg");

            var response = client.DetectLabels(image);

            foreach (var annotation in response)
            {
                if (annotation.Description != null)
                    Console.WriteLine(annotation.Description);
            }
c# android visual-studio xamarin.forms xamarin.android
2个回答
2
投票

C:/Users/abcde/Documents/AndroidApp/My Project-d38b212eadaf.json这样的道路永远不会起作用。这是一个Windows文件系统。

此外,您必须从设备或模拟器开始推理。该设备不能只访问您的Windows文件系统并获取该文件。您必须以某种方式在设备上获取该文件,并使用.NET中的Path对象导航到正确的路径。甚至可能通过依赖服务来获得每个平台的正确路径。

那有意义吗?


0
投票
var credential = GoogleCredential.FromJson(jsonPath);

是不正确的,因为FromJson需要一个JSON字符串,而不是JSON文件的路径:

/// <summary>
/// Loads credential from a string containing JSON credential data.
/// <para>
/// The string can contain a Service Account key file in JSON format from the Google Developers
/// Console or a stored user credential using the format supported by the Cloud SDK.
/// </para>
/// </summary>
public static GoogleCredential FromJson(string json) => defaultCredentialProvider.CreateDefaultCredentialFromJson(json);

因此,您需要将文件的内容加载到JSON字符串中,然后调用FromJson

© www.soinside.com 2019 - 2024. All rights reserved.