У меня странная проблема, может, я здесь что-то не так делаю. Поэтому я работаю над проектом WebApi с использованием .Net Core 2.2. И в этом я вызываю Api с другого сервера и анализирую ответ в этой модели.
public class LoginResponseModel
{
[JsonProperty(PropertyName = "token_type")]
public string tokenType { get; set; }
[JsonProperty(PropertyName = "access_token")]
public string accessToken { get; set; }
[JsonProperty(PropertyName = "expires_in")]
public string expiresIn { get; set; }
[JsonProperty(PropertyName = "refresh_token")]
public string refreshtToken { get; set; }
}
Как видно из приведенной выше модели, из Api я получаю ответ в SnakeCase , а параметры моей модели в CamelCase . Когда я десериализую свой ответ Api:
T1 responseModel = JsonConvert.DeserializeObject<T1>(await response.Content.ReadAsStringAsync());
Здесь T1 равно LoginResponseModel
И он успешно анализирует Api Response в моей модели, см. Прикрепленный скриншот,
![enter image description here](https://i.stack.imgur.com/Ra17K.png)
Но когда я вызываю свой Api, который вызывает другой API, ответ которого я только что проанализировал (пример выше), ответ возвращается в SnakeCase . Смотрите скриншот
![enter image description here](https://i.stack.imgur.com/UE35K.png)
Разъяснение
Просто чтобы уточнить, мобильное приложение вызывает мой Api, т. Е. Login () , а затем мой Login Методы вызывают другой Api с другого сервера, т. Е. AuthenticateUser (...) . Таким образом, ответ AuthenticateUser - SnakeCase , который я анализирую в моем LoginResponseModel , и затем этот ответ возвращается как Login api response. Но чем я получаю ответ с SnakeCase
Может кто-нибудь сказать мне, что мне здесь не хватает или что можно сделать, чтобы это исправить. Я не хочу использовать другую модель для преобразования в желаемый ответ.
Обновление
@Darkonekt Ответ помог мне, но теперь я столкнулся с другой проблемой в сериализации и десериализации. Так что это мой общий метод для PostAsync
private async Task<object> PostAsync<T1,T2>(string uri, T2 content)
{
using (var requestMessage = new HttpRequestMessage(HttpMethod.Post, uri))
{
var json = JsonConvert.SerializeObject(content);
using (var stringContent = new StringContent(json, Encoding.UTF8, "application/json"))
{
requestMessage.Content = stringContent;
HttpResponseMessage response = await _client.SendAsync(requestMessage);
if (response.IsSuccessStatusCode)
{
_logger.LogInformation("Request Succeeded");
var dezerializerSettings = new JsonSerializerSettings
{
ContractResolver = new DefaultContractResolver
{
NamingStrategy = new SnakeCaseNamingStrategy()
}
};
T1 responseModel = JsonConvert.DeserializeObject<T1>(await response.Content.ReadAsStringAsync(), dezerializerSettings);
return responseModel;
}
else
{
return await GetFailureResponseModel(response);
}
}
}
}
Поскольку этот метод является общим и будет использоваться для любого другого почтового запроса, но, как и здесь, я устанавливаю Deserializer в качестве SnakeCase, и он прекрасно работает, когда api-ответ находится в SnakeCase, но проблема возникает, когда мой другой почтовый запрос возвращает ответ в CamelCase , Я получаю нулевые значения, так как синтаксический анализ не удается. Как я могу исправить и эту проблему.