JSON在PascalCase中返回属性,而不是camelCase

Joh*_*nny 4 c# odata asp.net-core

使用Microsoft.AspNetCOre.OData 7.0.1,如果我有数据库中没有的模型列表,则JSON结果总是以PascalCase而不是camelCase的形式返回。如何获得我的清单为camelCase?

下面的相对示例:

我的模型不在数据库中。

public class Widget 
{
   public string Id { get; set; }
   public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器

[Route("api/[controller]")]
public class WidgetController : ODataController 
{
    [EnableQuery()]
    public IActionResult GetWidgets() 
    {
        // Create list of ten Widgets
        var widgetsList = new List<Widget>();

        for(var i = 0; i < 10; i++) {
            widgetsList.Add(new Widget() { Id = i, Name = $"Widget {i}" });
        }

        return this.Ok(widgetsList);
    }       
}
Run Code Online (Sandbox Code Playgroud)

/ api / GetWidgets?$ select = name以以下格式返回

{ Name: "Widget" } 
Run Code Online (Sandbox Code Playgroud)

Sha*_*tin 6

选项1

即使Widget不在数据库中,也可以将其添加到实体数据模型(EDM)中。EDM可能将骆驼案作为惯例。Widget将遵守该约定。

var builder = new ODataConventionModelBuilder();
builder.EnableLowerCamelCase();

builder.EntitySet<Widget>("Widgets");

_edmModel = builder.GetEdmModel();
Run Code Online (Sandbox Code Playgroud)

这是odata / webapi存储库示例OData分支

选项2

在中设置MVC JSON选项ConfigureServices。现在,JSON响应将采用驼峰格式。

services
    .AddMvc()
    .AddJsonOptions(options => {
        options.SerializerSettings.ContractResolver = 
            new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
    });
Run Code Online (Sandbox Code Playgroud)