目前没有对蛇案例的内置支持,
但允许通过继承.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