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

时间:2018-08-24 19:44:08

标签: c# asp.net-core odata

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

下面的相对示例:

我的模型不在数据库中。

public class Widget 
{
   public string Id { get; set; }
   public string Name { get; set; }
}

我的控制器

[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);
    }       
}

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

{ Name: "Widget" } 

1 个答案:

答案 0 :(得分:2)

选项1

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

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

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

_edmModel = builder.GetEdmModel();

这里是sample OData fork of the odata/webapi repository

选项2

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

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