Преобразование объекта UserLocation отсутствует в API каталога - PullRequest
0 голосов
/ 18 июня 2019

.NET / Google Directory API

Я работаю с некоторыми атрибутами в каталоге API.

Например, на телефонах я могу сделать что-то вроде этого:

System.Collections.Generic.IList <Google.Apis.Admin.Directory.directory_v1.Data.UserPhone> phone = results.Phones

И я получу список телефонных номеров, связанных с пользователем.Так что это работает вместе со всеми другими объектами, с которыми я работаю до тех пор, пока не наткнулся на «местоположение», которое в API каталога выглядит как «UserLocation».Я проверил, что объект выглядит как совпадает с местоположением json, когда я вызываю getUser ().

Эта строка:

System.Collections.Generic.IList<Google.Apis.Admin.Directory.directory_v1.Data.UserLocation> loc = results.Locations;

недопустима / не компилируется:

"Невозможно неявно преобразовать тип 'object' в 'System.Collections.Generic.IList'."

Когда я проверяю результаты getUser в API, это поле не имееттип, как остальные поля (например, телефон), это общий "object {Newtonsoft.JSon.linq.JArray}"

Ничего страшного, я попытался вручную преобразовать массив JSON, используя это: (неявно набрал, так что я уверен, что я 'у нас есть правильный объект) System.Collections.Generic.IList location = JsonConvert.DeserializeObject (results.Locations.ToString ());

Это также не компилируется:

"Невозможно неявно преобразовать тип «Google.Apis.Admin.Directory.directory_v1.Data.UserLocation» в «System.Collections.Generic.IList». Существует явное преобразование (вам не хватает приведения?) »

Я не видел несколько мест в админ-панели Google.Я подумал, что это может быть неверное представление в виде массива, поэтому я попробовал эту строку:

Google.Apis.Admin.Directory.directory_v1.Data.UserLocation location = (Google.Apis.Admin.Directory.directory_v1.Data.UserLocation)results.Locations;

, которая компилирует нормально / без ошибок или предупреждений.Но при запуске я получаю:

System.InvalidCastException: «Невозможно привести объект типа» Newtonsoft.Json.Linq.JArray к типу Google.Apis.Admin.Directory.directory_v1.Data.UserLocation;'

Во-первых, это похоже на ошибку в Google .Net API, и я открою для нее заявку на ошибку.Но мне нужно преодолеть это сейчас на короткий срок.Как я могу преобразовать этот объект в тип UserLocation []?

1 Ответ

0 голосов
/ 20 июня 2019

Нашел ответ, это метод, который работает для десериализации объекта в iList (строго типизированный, но не обязательный для этого):

IList<Google.Apis.Admin.Directory.directory_v1.Data.UserLocation> location = 
JsonConvert.DeserializeObject<IList<Google.Apis.Admin.Directory.directory_v1.Data.UserLocation>>(results.Locations.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...