Ответ содержимого RestSharp, возвращающий неверный формат json

#c# #json #asp.net-core-webapi #restsharp

#c# #json #asp.net-core-webapi #restsharp

Вопрос:

Я использую библиотеку RestSharp для выполнения запросов к WebAPI. Вот как я это делаю:

 var client = new RestClient(url);
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", autentication);
RestSharp.IRestResponse response = client.Execute(request);
  

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

 string jsonObject2 = ""{\"status\":\"success\",\"entities\":[{\"bank_code\":2,\"name\":\"BANK 02\"},{\"bank_code\":3,\"name\":\"BANCK 03\"},{\"bank_code\":4,\"name\":\"BANCK 04\"}]}"";

  

Response.content добавляет еще 2 и когда я попытался десериализовать, и он выдает исключение, что он не может преобразовать строку в мою модель.

Как я могу решить, что содержимое возвращается в этом формате?

  string jsonObject = "{"status":"success","entities":[{"bank_code":2,"name":"BANK 02"},{"bank_code":3,"name":"BANK 03"},{"bank_code":4,"name":"BANK 04"}]}";
  

Этот формат я могу десериализовать из-за правильного формата string json.

Комментарии:

1. Похоже, ваш API возвращает не JSON, а скорее экранированную строку. Является ли API вашим собственным?

2. API — это существующий проект, и когда я тестирую в POSTMAN, он работает должным образом.

3. Под «должным образом» вы подразумеваете, что вы получаете "{"status":"success","entities":[{"bank_code":2,"name":"BANK 02"},{"bank_code":3,"name":"BANK 03"},{"bank_code":4,"name":"BANK 04"}]}" ? Потому что это не JSON и не будет десериализовано правильно.

4. Но работает при десериализации с использованием JsonConvert. Десериализуйте объект. Не работает, только если в содержимом есть еще две косые черты в строке, подобной этой «\»

5. Пожалуйста, попробуйте использовать «return Content(result, «application / json»);» имеет ваш возвращаемый тип.

Ответ №1:

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

  string jsonData = JsonConvert.DeserializeObject<string>(restResponse.Content);
 EntidadResponse data = JsonConvert.DeserializeObject<EntidadResponse>(jsonData);
  

Ответ №2:

 string result = string.Empty;
using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
                        {
                            result = await reader.ReadToEndAsync();
                        }
return Content(result, "application/json");