0

В настоящее время я пишу систему, которая будет отвечать за создание и обслуживание групп Google таким образом, чтобы они связывали (и синхронизировали) наши внутренние системы ,Не удается получить настройки для группы Google с использованием клиентской библиотеки .NET

В настоящее время я работаю над просто созданием группы, изменением ее настроек и последующим распределением некоторых членов группы.

Пока что первая часть работает правильно, но затем вторая часть - с помощью API настроек групп Google - сбой. Кажется, что он всегда получает XML-данные, когда ожидает JSON. Это приводит к отказу от десериализации и, таким образом, генерируется исключение.

У меня есть последняя версия (на момент написания) клиентской библиотеки: Google.Apis.Groupssettings.v1 1.4.0.28227 (1.4.0-бета)

Это пример кода, который терпит неудачу :

// OAuth2.0/service account stuff here 
var initializer = //...; 
var settingsService = new GroupssettingsService(initializer); 
var settings = settingsService.Groups.Get("[email protected]").Execute(); 

все хорошо до той последней строки, которая выйдет из строя из-за ошибки:

  • GoogleApiException произошла ошибка, но ошибка г Отказ не может быть десериализован.
  • InnerException: Newtonsoft.Json.JsonReaderException: Неожиданный символ, встречающийся при разборе значения: <. Путь «», строка 0, позиция 0.

Использование Фидлер, я заметил, что это ответ:

<?xml version="1.0" encoding="UTF-8"?> 
<errors xmlns="http://schemas.google.com/g/2005"> 
<error> 
    <domain>GData</domain> 
    <code>invalid</code> 
    <internalReason>A system error has occurred</internalReason> 
</error> 
</errors> 

Я думаю, тот факт, его ошибка может быть сводится к тому, группа вновь создана, но я попытался с более старой, а также и получил следующее:

HTTP/1.1 200 OK 
Expires: Thu, 18 Jul 2013 13:00:13 GMT 
Date: Thu, 18 Jul 2013 13:00:13 GMT 
Cache-Control: private, max-age=0, must-revalidate, no-transform 
ETag: "w9Sr8O0S9lDi5Pcv_43hXQkUtmA/TS0CjusfGhj0vG_aNIJAXkmNM4s" 
Content-Type: application/atom+xml; charset=UTF-8 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 
Content-Length: 1811 
Server: GSE 

<?xml version="1.0" encoding="UTF-8"?> 
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:apps="http://schemas.google.com/apps/2006" xmlns:gd="http://schemas.google.com/g/2005"> 
<id>tag:googleapis.com,2010:apps:groupssettings:GROUP:[email protected]</id> 
<title>Groups Resource Entry</title> 
<content type="text">An example group</content> 
<author> 
    <name>Google</name> 
</author> 
<apps:email>[email protected]</apps:email> 
<apps:name>An example group</apps:name> 
<apps:description/> 
<apps:whoCanJoin>CAN_REQUEST_TO_JOIN</apps:whoCanJoin> 
<apps:whoCanViewMembership>ALL_MANAGERS_CAN_VIEW</apps:whoCanViewMembership> 
<apps:whoCanViewGroup>ALL_MEMBERS_CAN_VIEW</apps:whoCanViewGroup> 
<apps:whoCanInvite>ALL_MANAGERS_CAN_INVITE</apps:whoCanInvite> 
<apps:allowExternalMembers>false</apps:allowExternalMembers> 
<apps:whoCanPostMessage>ANYONE_CAN_POST</apps:whoCanPostMessage> 
<apps:allowWebPosting>true</apps:allowWebPosting> 
<apps:maxMessageBytes>5242880</apps:maxMessageBytes> 
<apps:isArchived>false</apps:isArchived> 
<apps:archiveOnly>false</apps:archiveOnly> 
<apps:messageModerationLevel>MODERATE_NONE</apps:messageModerationLevel> 
<apps:spamModerationLevel>MODERATE</apps:spamModerationLevel> 
<apps:replyTo>REPLY_TO_IGNORE</apps:replyTo> 
<apps:customReplyTo/> 
<apps:sendMessageDenyNotification>false</apps:sendMessageDenyNotification> 
<apps:defaultMessageDenyNotificationText/> 
<apps:showInGroupDirectory>false</apps:showInGroupDirectory> 
<apps:allowGoogleCommunication>false</apps:allowGoogleCommunication> 
<apps:membersCanPostAsTheGroup>false</apps:membersCanPostAsTheGroup> 
<apps:messageDisplayFont>DEFAULT_FONT</apps:messageDisplayFont> 
<apps:includeInGlobalAddressList>true</apps:includeInGlobalAddressList> 
</entry> 

Таким образом, даже тогда, это еще не deserializable, и, таким образом, не работает.

Что я делаю неправильно, если что?

ответ

3

Клиентская библиотека .NET не поддерживает xml, в то время как API-интерфейс Groupssettings поддерживает как atom, так и json. Мое предложение для вас состоит в том, чтобы сделать следующее:

var getRequest = settingsService.Groups.Get("[email protected]"); 
getRequest.Alt = "json"; 
var settings = getRequest.Execute(); 
+0

Я понял так много, но предполагал, что клиент lib автоматически запросит представление, которое он может обрабатывать. Я искал способ заставить его попросить JSON, но ничего не нашел. Я попробую завтра на работе. Спасибо за ваш ответ :-) –

+0

Пожалуйста, дайте мне знать :) – peleyal

+0

Это похоже на трюк, спасибо :-). Иногда я все еще сталкиваюсь с ошибкой 400, но, как я уже говорил, могу только предположить, что это связано с тем, что я прошу об этом сразу после ее создания. По крайней мере, ошибка предоставляется как JSON. –