Клиенту Autorest не удается десериализовать тело zip-файла - PullRequest
0 голосов
/ 12 октября 2018

Используя сгенерированный клиент 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
  }
},
...