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

Ale*_*lbi 2 c# json entity-framework asp.net-apicontroller asp.net-core

我制作了一个 API,在实体框架详述之后,我发送了一个在 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; }
}
Run Code Online (Sandbox Code Playgroud)

当收到它(Xamarin 应用程序)后,问题就开始了,Json 的第一个字母小写,但我想在完全相同的类中反序列化它,但不能,因为该类具有大写的属性(C# 标准)。现在我正在使用一个可怕的“助手”类,它具有小写的属性来翻译它。

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

编辑

我使用ASP.NET Web API CoreNewtonsoft.Json

在 Xamarin 应用程序中,我使用System.Text.Json

Mét*_*ule 8

默认情况下,ASP.NET Core 使用驼峰式大小写对所有 JSON 属性名称进行编码,以匹配 JSON 约定(请参阅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();
    });
Run Code Online (Sandbox Code Playgroud)

对于 ASP.NET Core 2.0:

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


Vin*_*ssi 8

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

默认情况下,它设置为驼峰式大小写,但如果您将其设置为null,则属性名称将保持不变(或保持您在课堂上所写的内容)。

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

services.AddControllers()
.AddJsonOptions(options =>
{
   options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
Run Code Online (Sandbox Code Playgroud)