Asp.net 核心 Razor 页面序列化在 Startup.cs 中无法与 CamelCasePropertyNamesContractResolver 一起使用

Asp.net Core Razor Pages serialization not working with CamelCasePropertyNamesContractResolver in Startup.cs

我正在使用 Asp.net Core Razor Pages,我正在返回 json。我需要 json 全面采用骆驼外壳,因此我尝试在 Startup.cs 中设置解析器,如下所示

services.AddMvc()
        .AddJsonOptions(options => {
             options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        });

但是这不起作用,razor 页面仍然以 Pascal 大小写返回 json。我该如何纠正这个问题?谢谢。

当您使用 AddJsonOptions 时,您正在配置特定于 ASP.NET Core MVC 的 JsonSerializerSettings 实例。当您使用 JsonConvert.SerializeObject 时,您使用的是 JsonSerializerSettings 不同 实例。为了影响 that 实例,你可以使用 JsonConvert.DefaultSettings,像这样:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};

遗憾的是,您对 DefaultSettings 所做的更改不适用于通过 AddJsonOptions 配置的实例 - 您需要单独配置这些实例。如果您感兴趣,您可以看到 source 中的 JsonSerializerSettingsProvider 如何创建一个单独的实例。