API Json 对具有大写属性首字母的 C# 对象的响应

API Json response to C# Object with capital case properties first letter

我做了一个 API,在 Entity Framework 详细说明之后,我发送了一个在 Json.

中序列化的对象

我的对象:

public class Package
{
    public int Items { get; set; }
    public string Code { get; set; }
    public string Description { get; set; }
    public double? Weight { get; set; }
    public string Size { get; set; }
    public string PackageType { get; set; }
}

收到它(Xamarin 应用程序)后问题开始,Json 的首字母小写,但我想用完全相同的 class 反序列化它,但它不能,因为 class 具有大写形式的属性(C# 标准)。 现在我正在使用一个可怕的 'helper' class 具有小写属性来翻译它。

知道如何处理这个问题并直接发送首字母大写的 Json 吗?

编辑

我使用 ASP.NET web API CoreNewtonsoft.Json

在 Xamarin 应用中我使用 System.Text.Json

默认情况下,ASP.NET Core 对所有 JSON 属性名称进行驼峰式编码,以匹配 JSON 约定(请参阅 announcement of the change on GitHub)。

如果您想保留 C# 约定,您需要更改默认的 JSON 序列化程序。

在您的 Startup.cs 中,像这样配置 MVC 部分(ASP.Net Core 3.0):

services
    .AddMvc()
    .AddNewtonsoftJson(options =>
    {
        // don't serialize with CamelCase (see https://github.com/aspnet/Announcements/issues/194)
        jsonSettings.ContractResolver = new JsonContractResolver();
    });

对于 ASP.NET 核心 2.0:

services
    .AddMvc()
    .AddJsonOptions(options =>
    {
        // don't serialize with CamelCase (see https://github.com/aspnet/Announcements/issues/194)
        jsonSettings.ContractResolver = new DefaultContractResolver();
    });

您必须更改 json 序列化选项的默认 属性 命名策略。

默认设置为驼峰式大小写,但如果您将其设置为 null,属性 名称将保持不变(或保持您在 class 中所写的名称)。

只需将此添加到您的 Startup.cs:

services.AddControllers()
.AddJsonOptions(options =>
{
   options.JsonSerializerOptions.PropertyNamingPolicy = null;
});