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 Core 和 Newtonsoft.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#:解析对具有 x 属性的类对象的非 JSON 仅数组 api 响应
C#实体对象序列化成Json并让字段的首字母小写的两种解决方法