如何解决ASP.NET Core 3.1:如何将驼峰式json从webapi反序列化为pascalcase
ASP.NET 3.1的默认WebApi模板会生成一项服务,该服务以驼峰式JSON格式返回天气预报。
如果我想在ASP.NET 3.1 Web应用程序中使用此服务,但是无法访问Web服务,如何将驼峰式JSON反序列化为pascal大小写的对象?
因此反序列化此WebAPI输出:
{
"date": "2020-10-14T13:45:55.9398376+01:00","temperatureC": 43,"temperatureF": 109,"summary": "Bracing"
}
此对象:
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string Summary { get; set; }
}
如果我可以访问服务和网站,则只需设置JSON合同解析器即可。
解决方法
您可以为此添加JsonProperty属性。
public class WeatherForecast
{
[JsonProperty(PropertyName = "date")]
public DateTime Date { get; set; }
[JsonProperty(PropertyName = "temperatureC")]
public int TemperatureC { get; set; }
[JsonProperty(PropertyName = "temperatureF")]
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
[JsonProperty(PropertyName = "summary")]
public string Summary { get; set; }
}
,
或者,在项目中添加 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包。然后,在 Startup.cs 类中,包含以下几行:
services.AddControllers().AddNewtonsoftJson();
services.Configure<MvcNewtonsoftJsonOptions>(options =>
{
options.SerializerSettings.ContractResolver = new
CamelCasePropertyNamesContractResolver();
});
,
因此,在尝试了几件事之后,以下代码对我有用:
public async Task<IEnumerable<WeatherForecast>> GetWeatherForecastsAsync()
{
var httpClient = this.httpClientFactory.CreateClient("retryable");
using var response = await httpClient.GetAsync(Endpoint);
response.EnsureSuccessStatusCode();
var responseStream = await response.Content.ReadAsStreamAsync();
return await JsonSerializer.DeserializeAsync<IEnumerable<WeatherForecast>>
(responseStream,new JsonSerializerOptions { PropertyNamingPolicy =
JsonNamingPolicy.CamelCase });
}
基本上,反序列化响应流时,我没有将任何选项传递给JsonSerializer。添加CamelCase JSON命名策略有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。