Невозможно десериализовать ответ об ошибке от Graph API из-за недопустимого символа

Ответ об ошибке, который я получаю от Graph API, приведен ниже.

{"error": {"code": "ErrorItemNotFound", "message": "Указанный объект не найден в магазине.", "innerError": {"request-id": "c2b32b83-5ccf-4385-bee1 -33afcc31deb0 "," date ":" 2016-07-25T00: 25: 16 "}}}

Когда я пытаюсь десериализовать ответ в свой собственный объект ошибки, я получаю сообщение об ошибке

При анализе значения обнаружен неожиданный символ:. Путь '', строка 0, позиция 0.

Скопируйте указанный выше JSON и попробуйте проверить с помощью этого инструмента https://jsonformatter.curiousconcept.com/

У кого-нибудь еще есть такая же проблема?


ОБНОВИТЬ

Извините за поздний ответ, ребята. Ниже приведен точный код, который я использую. Я только что снова проверил это и получаю ту же ошибку.

URL-адрес Enpoint: https://graph.microsoft.com/v1.0/users/MY_USER@EMAIL/events/

// New rest client with the destination URL.
        var client = new RestClient(url);

        // Type of request
        var request = new RestRequest(requestType);

        // Headers
        request.AddHeader("Authorization", "Bearer " + accessToken);
        request.AddHeader("Content-Type", "application/json");


        // Content serialized in a json format  
        if (requestType == Method.POST || requestType == Method.PATCH || requestType == Method.PUT)
        {
            var jsonBody = JsonConvert.SerializeObject(requestContent);
            request.AddParameter("application/json", jsonBody, ParameterType.RequestBody);
        }


        var response = await client.ExecuteTaskAsync(request);

Тело запроса

{"Id":null,"Subject":"Maths","UserEmailAddress":"[email protected]","Start":{"DateTime":"2016-09-1T10:11:56","TimeZone":"Pacific/Auckland"},"End":{"DateTime":"2016-09-1T11:11:56","TimeZone":"Pacific/Auckland"},"Location":null,"Body":null,"ReminderMinutesBeforeStart":60,"IsReminderOn":true}

person Thivy Ruthra    schedule 25.07.2016    source источник
comment
Привет, Thivy! Спасибо, что попробовали Microsoft Graph. Не могли бы вы поделиться дополнительной информацией об этой проблеме? К какой конечной точке вы пытаетесь получить доступ? Можете ли вы поделиться с нами просьбой?   -  person Sky Liu - Microsoft    schedule 26.07.2016
comment
Как вы уже сделали, упомянутая полезная нагрузка ошибки кажется действительным JSON. Используете ли вы клиентский SDK (если да, то какую платформу?)? Если нет, то какую библиотеку вы используете для десериализации полезной нагрузки JSON?   -  person Sriram Dhanasekaran-MSFT    schedule 28.07.2016
comment
Не могли бы вы предоставить образец кода десериализации? Сам JSON действителен.   -  person Marc LaFleur    schedule 29.07.2016


Ответы (1)


Опубликованный вами текст JSON фактически содержит 3-байтовую спецификацию UTF-8 (0xEF 0xBB 0xBF). Это приведет к сбою большинства парсеров JSON.

Простым обходным решением вашей проблемы было бы обнаружение спецификации и ее удаление перед синтаксическим анализом.

Предполагая, что JavaScript, что-то вроде ниже решит вашу непосредственную проблему.

<!-- language: lang-js -->
// Reading the string into JavaScript will convert the BOM from the 3-byte
// version to the 2-byte version (0xFEFF).
json = json.replace(/^\uFEFF/, '');

-

Еще

Было бы гораздо ценнее выяснить, почему это вообще вообще добавляется к результирующей ошибке. Как вы делаете запрос, который приводит к этой ошибке? Если это с веб-страницы, какова кодировка страницы? Устанавливаете ли вы какие-либо другие заголовки HTTP-запроса, которые могут относиться к желаемой кодировке?

person Robert Anderson - Microsoft    schedule 03.08.2016
comment
Отличный улов. Я скопировал и вставил JSON сверху, но явно пропустил спецификацию во время процесса. Если, как вы заявили, нет чего-то уникального в том, как вызывается конечная точка REST, то здесь явно есть ошибка. Спецификация не должна не включаться в полезную нагрузку JSON; RFC 7159 прямо упоминает: tools.ietf.org/html/rfc7159#section-8.1 - person Marc LaFleur; 03.08.2016
comment
Также был укушен этой ошибкой, использовал сервер Node.js и автоматически анализировал ответы для каждого типа содержимого application / json, но продолжал получать ошибки синтаксического анализа JSON при попытке расшифровать, почему вызов API графа не работал. Попытка отладки была очень неприятной, пожалуйста, исправьте ошибку JSON, чтобы она была действительной! - person Nexii Malthus; 13.10.2016