[Google API] GoogleCredential-Error deserializing json credential data

google 已經提供非常多與機器學習相關的API

比如說Vision API等等

而在使用的時候,需要註冊一個GCP的帳號(也就是google 帳戶 開通GCP)

建立API 授權後,就可以開始對API進行呼叫

而本例將是利用.net framework C#的版本

進行授權驗証後,方使用Vision API

這邊在建立驗証權限的時候,讀Google 提供的key.Json檔案時

發生了Json解析問題「Error deserializing json credential data」

在此做一個記錄

Sample Code:

//取得憑証
        public GoogleCredential CreateCredential()
        {
            using (var stream = new FileStream(JsonKeypath, FileMode.Open, FileAccess.Read))
            {
                string[] scopes = { VisionService.Scope.CloudPlatform };
                var credential = GoogleCredential.FromStream(stream);
                credential = credential.CreateScoped(scopes);
                return credential;
            }
        }

上面這一段是要取得憑証檔,以驗証程式的身份是合法的Sample Code

而在執行下面這一段的時候

var credential = GoogleCredential.FromStream(stream);

會出現「Error deserializing json credential data」的問題

而經查問題都是指向了「Newtonsoft.Json」這個dll

通常在經過更新這個dll就會解決

但因為手邊的dll版本就是11.0.0.0

在不更新dll的情況之下

就要在app.config 中將元件的相依性做版本的指定

  <runtime>
    <!--直接標示要對應的版本內容-->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

筆者猜這樣的設定是要讓Google.Api元件在執行Newtonsoft.Json就能對應到程式中所附的dll之版本

以不造成無法判讀Json的問題