Webapi 控制器将属性名称更改为小写

szp*_*pic -1 c# asp.net-core-webapi

我有这样的课程:

public class Creature
{
    public string Town { get; set; }
    public string Name { get; set; }
    public int Level { get; set; }
    public bool Upgrade { get; set; }
    public int Attack { get; set; }
    public int Defence { get; set; }
    public int MinDamage { get; set; }
    public int MaxDamage { get; set; }
    public int Speed { get; set; }
    public int Hp { get; set; }
    public int Cost { get; set; }
}

public class CreaturesList
{
    public List<Creature> Creatures { get; set; }
}

 public class ReadCreatures : IReadCreatures
    {
        public Creature GetCreature(string name)
        {
            var result = GetData(); 
            return result.Creatures.Where(w => w.Name.ToLower().Equals(name.ToLower())).FirstOrDefault();
        }

        protected CreaturesList GetData()  => JsonSerializer.Deserialize<CreaturesList>(heroes3wiki.Properties.Resources.Creatures);
    }
}
Run Code Online (Sandbox Code Playgroud)

和控制器:

public class CreaturesController : ControllerBase
{

    private readonly ILogger<CreaturesController> _logger;
    private readonly IReadCreatures _getCreatures;

    public CreaturesController(ILogger<CreaturesController> logger , IReadCreatures getCreatures)
    {
        _logger = logger;
        _getCreatures = getCreatures;
    }

    [HttpGet]
    public IEnumerable<Creature> Get() => _getCreatures.GetCreatures();

    [HttpGet("{name}")]
    public Creature Get(string name) => _getCreatures.GetCreature(name);

}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我拥有生物类第一个大写字母的所有属性。但是当我调用这个端点时,我收到如下数据:

{"town":"Castle","name":"Pikeman","level":1,"upgrade":false,"attack":4,"defence":5,"minDamage":1,"maxDamage":3,"speed":4,"hp":10,"cost":60}
Run Code Online (Sandbox Code Playgroud)

谁能向我解释一下,这应该是这样,还是我在某个地方出错了?

Pol*_*ome 6

Asp.Net Core 改变了默认行为(我认为是在 2.x 和 3.x 之间)。

如果您想保留属性名称(并且不更改大小写),则需要将其设置PropertyNamingPolicynull

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddControllers()
        .AddJsonOptions(options => {
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
        });
}
Run Code Online (Sandbox Code Playgroud)

来自JsonSerializerOptions.PropertyNamingPolicy的文档:

属性命名策略,或null保持属性名称不变。