And*_*rus 5 c# asp.net-core-mvc asp.net-core json-serialization system.text.json
我有一个 ASP.NET 5 MVC Core 应用程序控制器,其中包含以下代码:
using System.Text.Json;
public async Task<IActionResult> EstoAPICall() {
...
EstoOst estoOst;
var json = JsonSerializer.Serialize(estoOst);
StringContent content = new(json, Encoding.UTF8, "application/json");
using var response = await httpClient.PostAsync("https://example.com", content);
...
}
public class EstoOst {
public decimal Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这会导致错误,因为 API 需要amountJSON 中的小写字母,但.Serialize(...)返回的是大写字母Amount。
我怎样才能解决这个问题?
切换到 Json.NET,或者将类属性名称更改为小写似乎不是好的解决方案。
Erm*_*ary 14
如果您确实正在寻找所有小写属性名称而不是驼峰式属性名称,例如FullName变成fullname和 not fullName,则没有任何内置内容 - 您必须JsonNamingPolicy像这样创建自己的属性名称:
LowerCaseNamingPolicy.cs
public class LowerCaseNamingPolicy : JsonNamingPolicy
{
public override string ConvertName(string name)
{
if (string.IsNullOrEmpty(name) || !char.IsUpper(name[0]))
return name;
return name.ToLower();
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var options = new JsonSerializerOptions {
PropertyNamingPolicy = new LowerCaseNamingPolicy(),
};
var json = JsonSerializer.Serialize(estoOst, options);
Run Code Online (Sandbox Code Playgroud)
但是,考虑到您提到的 Json.NET 也没有小写命名策略,我认为您正在寻找驼峰式命名。
如果是这样,请将JsonSerializerOptions.PropertyNamingPolicy属性设置为JsonNamingPolicy.CamelCase将属性名称序列化为驼峰式大小写格式:
var options = new JsonSerializerOptions {
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};
var json = JsonSerializer.Serialize(estoOst, options);
Run Code Online (Sandbox Code Playgroud)
这是一个输出的工作演示并显示两种方法的输出差异:
public class Program
{
public static void Main()
{
var person = new Person
{
Age = 100,
FullName = "Lorem Ipsum"
};
var camelCaseJsonSerializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
var lowercaseJsonSerializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = new LowerCaseNamingPolicy()};
var camelCaseJson = JsonSerializer.Serialize(person, camelCaseJsonSerializerOptions);
var lowercaseJson = JsonSerializer.Serialize(person, lowercaseJsonSerializerOptions);
Console.WriteLine(camelCaseJson);
Console.WriteLine(lowercaseJson);
}
}
public class Person
{
public string FullName { get; set; }
public int Age { get; set; }
}
public class LowerCaseNamingPolicy : JsonNamingPolicy
{
public override string ConvertName(string name)
{
if (string.IsNullOrEmpty(name) || !char.IsUpper(name[0]))
return name;
return name.ToLower();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
public class LowerCaseNamingPolicy : JsonNamingPolicy
{
public override string ConvertName(string name)
{
if (string.IsNullOrEmpty(name) || !char.IsUpper(name[0]))
return name;
return name.ToLower();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9129 次 |
| 最近记录: |