ASP.NET Core 1.0 Web API使用驼峰命名法

49

RC2 版本中,相同的代码返回使用驼峰命名的 json 格式。在 netcore 1.0 发布后,我开始了一个新项目,但相同的代码返回小写字母的 json 格式。

尝试过多种解决方案,但都没有生效。 web-api-serialize-properties-starting-from-lowercase-letter

3个回答

110
services
    .AddMvc()
    .AddJsonOptions(options =>
    {
        options.SerializerSettings.ContractResolver
            = new Newtonsoft.Json.Serialization.DefaultContractResolver();
    });

这将使 JSON 对象的名称与 .NET 类属性保持一致。


1
这需要哪个命名空间/引用?我没有看到“AddJsonOptions”。 - Kyle Gobel
它是MVC6的命名空间。Microsoft.Extensions.DependencyInjection//通过Microsoft.Extensions.DependencyInjection.IMvcBuilder配置MVC的扩展方法。 class MvcJsonMvcBuilderExtensions - Brivvirs
谢谢!!我有同样的问题,这个解决方案很好用。 - Floxy
运行正常。谢谢。 - ibrahimozgon

36

您可以通过以下方式配置JSON行为:

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

7
实际上现在这是默认行为(不幸的是),他想要默认值,就像原来那样,不改变属性名称或大小写。 - Omu
2
@Omu 这些实际上并不相同(至少在 .net core 2.0 中)。DefaultContractResolver 接受 CamelCase 并返回 TitleCase,而 CamelCasePropertyNamesContractResolver 则接受和返回 CamelCase。 - JMK
@Omu,这个在 .NET Core 1.x 和 2.0 中有所改变吗? - Hinrich

0

你也可以在单个序列化器级别上执行此操作,而不是在全局级别上执行。

例如,在控制器操作方法中将对象作为JSON返回,你可以这样做:

var jsonSerializerSettings = new JsonSerializerSettings { ContractResolver = new DefaultContractResolver() };

return new JsonResult(myObject, jsonSerializerSettings);

生成的 JSON 字符串将采用 PascalCase 格式,以匹配 .NET 类/属性名称的预期格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接