В настоящее время нет встроенной поддержки для случая со змеей,
, но .NET Core 3.0
позволяет настроить настраиваемую политику именования путем наследования от JsonNamingPolicy
.
Вам необходимо реализовать метод ConvertName
с преобразованием случая змеи.
(В Newtonsoft Json.NET есть внутренний класс StringUtils
, который показывает, как с этим справиться. )
В приведенной ниже реализации POC повторно используется Json.NET SnakeCaseNamingStrategy
только для преобразования регистра змеи (тогда как все приложение использует System.Text.Json
) .
Лучше избегать зависимости от Newtonsoft Json.Net только для преобразования случая змеи, но в этом довольно ленивом примере ниже я не хочу переосмысливать / заново изобретать преобразование случая змеиМетод.
Суть этого ответа заключается в том, как подключить пользовательскую политику (а не саму конвертацию случая змеи). (Есть много библиотек и примеров кода , которые показываюткак это сделать.)
public class SnakeCaseNamingPolicy : JsonNamingPolicy
{
private readonly SnakeCaseNamingStrategy _newtonsoftSnakeCaseNamingStrategy
= new SnakeCaseNamingStrategy();
public static SnakeCaseNamingPolicy Instance { get; } = new SnakeCaseNamingPolicy();
public override string ConvertName(string name)
{
/* A conversion to snake case implementation goes here. */
return _newtonsoftSnakeCaseNamingStrategy.GetPropertyName(name, false);
}
}
В Startup.cs
летВы примените этот пользовательский SnakeCaseNamingPolicy
.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddJsonOptions(
options => {
options.JsonSerializerOptions.PropertyNamingPolicy =
SnakeCaseNamingPolicy.Instance;
});
}
Экземпляр класса ниже
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureCelcius { get; set; }
public int TemperatureFahrenheit { get; set; }
[JsonPropertyName("Description")]
public string Summary { get; set; }
}
будет иметь представление Json
как:
{ "date" : "2019-10-28T01:00:56.6498885+01:00",
"temperature_celcius" : 48,
"temperature_fahrenheit" : 118,
"Description" : "Cool"
}
Обратите внимание, что свойству Summary
присвоено имя Description
,
, которое соответствует System.Text.Json.Serialization.JsonPropertyNameAttribute
.