Используя сгенерированный клиент ac # autorest (через Visual Studio 17, Добавить REST API Client), я получаю исключение при десериализации тела ответа (типа application / zip).Я ищу идеи о том, как преодолеть это.Сгенерированный код, который выбрасывает исключение:
if ((int)_statusCode == 200)
{
_responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
try
{
_result.Body = SafeJsonConvert.DeserializeObject<byte[]>(_responseContent, this.Client.DeserializationSettings);
}
catch (JsonException ex)
{
_httpRequest.Dispose();
if (_httpResponse != null)
{
_httpResponse.Dispose();
}
throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
}
}
Исключение (с незначительными изменениями для конфиденциальности):
System.AggregateException: One or more errors occurred. ---> Microsoft.Rest.SerializationException: Unable to deserialize the response. ---> Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: P. Path '', line 1, position 1.
at Newtonsoft.Json.JsonTextReader.ReadAsBytes()
at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject[T](String json, JsonSerializerSettings settings)
at API.Files.<GetZippedFileWithHttpMessagesAsync>d__8.MoveNext() in C:\...\Files.cs:line 600
--- End of inner exception stack trace ---
at API.Files.<GetZippedFileWithHttpMessagesAsync>d__8.MoveNext() in C:\Files.cs:line 609
--- End of stack trace from previous location where exception was thrown ---
Насколько я могу судить, фактический ответ хорошо отформатирован иЯ знаю, что другие приложения могут успешно вызывать метод и анализировать ответ.
Вот некоторые из json, использованных для создания клиента, хотя некоторые отредактированы для конфиденциальности.
"/v{api-version}/files/{idCode}/method/zipped": {
"get": {
"tags": [
"Lists"
],
"summary": "",
"description": "This method will return a zipped file.",
"operationId": "Files_GetZipped",
"consumes": [],
"produces": [
"application/json",
"text/json",
"application/json-patch+json"
],
"parameters": [
{
"name": "idCode",
"in": "path",
"description": "identifier",
"required": true,
"type": "string"
},
{
"name": "api-version",
"in": "path",
"description": "The requested API version",
"required": true,
"type": "string",
"default": "1.0"
}
],
"responses": {
"200": {
"description": "Ok",
"schema": {
"format": "byte",
"type": "string"
}
},
"400": {
"description": "Bad request"
},
"500": {
"description": "Server Error"
}
},
"deprecated": false
}
},