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 Core和Newtonsoft.Json
在 Xamarin 应用程序中,我使用System.Text.Json
默认情况下,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)
您必须更改 json 序列化选项的默认属性命名策略。
默认情况下,它设置为驼峰式大小写,但如果您将其设置为null,则属性名称将保持不变(或保持您在课堂上所写的内容)。
只需将此添加到您的Startup.cs:
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
Run Code Online (Sandbox Code Playgroud)