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

Posted

技术标签:

【中文标题】API Json 对具有大写属性首字母的 C# 对象的响应【英文标题】:API Json response to C# Object with capital case properties first letter 【发布时间】:2020-04-04 12:08:23 【问题描述】:

我制作了一个 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; 

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

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

编辑

我使用 ASP.NET Web API CoreNewtonsoft.Json

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

【问题讨论】:

你用的是asp.net web api core吗? 您使用的是 Newtonsoft.Json 还是 System.Text.Json? 对不起,我没有指定它...我使用 asp.net web api 核心,我在核心 API 中使用 Newtonsoft.Json,在 Xamarin 应用程序中使用 System.Text.Json 【参考方案1】:

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

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

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

services.AddControllers()
.AddJsonOptions(options =>

   options.JsonSerializerOptions.PropertyNamingPolicy = null;
);

【讨论】:

为我工作。谢谢【参考方案2】:

默认情况下,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 Core 2.0:

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

【讨论】:

以上是关于API Json 对具有大写属性首字母的 C# 对象的响应的主要内容,如果未能解决你的问题,请参考以下文章

FastJSONFastJson转换json字符串key的首字母小写变大写的解决办法

为何C#属性名称的首字母要大写

C#:解析对具有 x 属性的类对象的非 JSON 仅数组 api 响应

C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

Java编程系列解决Java类或对象属性首字母大写无法获取值问题

Java编程系列解决Java类或对象属性首字母大写无法获取值问题