首页 > 解决方案 > Asp.net Core Razor Pages 序列化不适用于 Startup.cs 中的 CamelCasePropertyNamesContractResolver

问题描述

我正在使用 Asp.net Core Razor Pages,我正在返回 json。我需要将 json 全部放在骆驼外壳中,因此我尝试像这样在Startup.cs中设置解析器

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

然而这不起作用,剃须刀页面仍然在 Pascal 外壳中返回 json。我该如何纠正这个问题?谢谢你。

标签: c#asp.net-corejson.netrazor-pagescamelcasing

解决方案


当您使用 时,您正在配置一个特定于 ASP.NET Core MVCAddJsonOptions的实例。JsonSerializerSettings当您使用 时JsonConvert.SerializeObject,您使用的是不同JsonSerializerSettings. 为了影响实例,您可以使用JsonConvert.DefaultSettings,如下所示:

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

不幸的是,您所做的更改DefaultSettings不适用于通过配置的实例AddJsonOptions- 您需要单独配置这些。如果您有兴趣,您可以看到它是如何由sourceJsonSerializerSettingsProvider中的 a 创建的单独实例。


推荐阅读