Ale*_*sky 3 c# json asp.net-core system.text.json
在ASP.NET Core 3.0 Web API项目中,如何指定System.Text.Json序列化选项以自动将Pascal Case属性序列化/反序列化为Camel Case,反之亦然?
给定具有Pascal Case属性的模型,例如:
public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以及使用System.Text.Json将JSON字符串反序列化为Person类类型的代码:
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);
Run Code Online (Sandbox Code Playgroud)
除非将JsonPropertyName与以下每个属性一起使用,否则不会成功反序列化:
public class Person
{
[JsonPropertyName("firstname")
public string Firstname { get; set; }
[JsonPropertyName("lastname")
public string Lastname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在中尝试了以下方法startup.cs,但在仍然需要方面没有帮助JsonPropertyName:
services.AddMvc().AddJsonOptions(options =>
{
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
// also the following given it's a Web API project
services.AddControllers().AddJsonOptions(options => {
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
Run Code Online (Sandbox Code Playgroud)
如何使用新的System.Text.Json命名空间在ASP.NET Core 3.0中设置Camel Case序列化/反序列化?
谢谢!
sut*_*hoy 39
在startup.cs:
// keeps the casing to that of the model when serializing to json
// (default is converting to camelCase)
services.AddMvc()
.AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);
Run Code Online (Sandbox Code Playgroud)
这意味着您不需要导入 newtonsoft.json。
的唯一其他选择options.JsonSerializerOptions.PropertyNamingPolicy是JsonNamingPolicy.CamelCase。似乎没有任何其他JsonNamingPolicy命名策略选项,例如 snake_case 或 PascalCase。
Ram*_*yev 35
如果要camelCase序列化,请在Startup.cs 中使用此代码:(例如 firstName)
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
Run Code Online (Sandbox Code Playgroud)
如果要PascalCase序列化,请在Startup.cs 中使用此代码:(例如 FirstName)
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy= null;
);
Run Code Online (Sandbox Code Playgroud)
hal*_*ldo 17
您可以使用PropertyNameCaseInsensitive. 您需要将其作为参数传递给解串器。
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var options = new JsonSerializerOptions() { PropertyNameCaseInsensitive = true };
var person = JsonSerializer.Deserialize<Person>(json, options);
Run Code Online (Sandbox Code Playgroud)
其中(来自文档):
获取或设置一个值,该值确定属性的名称在反序列化期间是否使用不区分大小写的比较。默认值为 false
因此,它不指定camelCase 或PascalCase,但它将使用不区分大小写的比较。
下面将为通过控制器端点传递的 Json 配置 System.Text.Json:
services.AddControllers()
.AddJsonOptions(options => {
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
});
Run Code Online (Sandbox Code Playgroud)
小智 14
您仍然可以通过安装Microsoft.AspNetCore.Mvc.NewtonsoftJsonNuget Package来设置它的应用程序范围,这允许您使用以前的 Json 序列化器实现:
services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
Run Code Online (Sandbox Code Playgroud)
感谢 Poke,答案在这里找到: IMvcBuilder AddJsonOptions 在 .Net Core 3.0 中的位置?
要防止在序列化期间将 pascal 大小写属性重命名为驼峰大小写,请使用构建器的服务属性的 ConfigureHttpJsonOptions 方法。
builder.Services.ConfigureHttpJsonOptions(options => options.SerializerOptions.PropertyNamingPolicy = null);
Run Code Online (Sandbox Code Playgroud)
要强制转换为驼峰式大小写(默认行为),请使用:
builder.Services.ConfigureHttpJsonOptions(options => options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase);
Run Code Online (Sandbox Code Playgroud)
AddJsonOptions()将System.Text.Json仅配置为MVC。如果要JsonSerializer在自己的代码中使用,则应将配置传递给它。
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Parse<Person>(json, options);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |