为什么Request.Content.ReadAsAsync不区分大小写?

本文关键字:大小写 不区 ReadAsAsync Request Content 为什么 | 更新日期: 2023-09-27 17:50:25

假设我从客户端发送的json有效负载如下

{"Number": 2, "number": 4}

在服务器端,我有这个模型类。

public class Arg
{
    public int Number { get; set; }
}

负载在我的控制器中被反序列化,如下所示:

Request.Content.ReadAsAsync<Arg>();

为什么Arg.Number == 4?如何使ReadAsAsync区分大小写?

为什么Request.Content.ReadAsAsync不区分大小写?

通过Json.NET完成的反序列化。我正在深入研究过程,并以下一个代码结束:

public JsonProperty GetClosestMatchProperty(string propertyName)
{
    JsonProperty property = GetProperty(propertyName, StringComparison.Ordinal);
    if (property == null)
        property = GetProperty(propertyName, StringComparison.OrdinalIgnoreCase);
    return property;
}

因此,正如您所看到的,如果使用String.Ordinal比较器无法获得属性,它将尝试String.OrdinalIgnoreCase,这就是为什么它会覆盖您的值。

对于name,我认为只有一个解决方案可以添加dummy属性来捕获该值:

public class Arg
{
    [JsonProperty("Number")]
    public int Number { get; set; }
    [JsonProperty("number")]
    public int SmallNumber { get; set; }
}

您需要在自定义反序列化器中添加一个新属性

public class Arg
{
    public int Number { get; set; }
    public int number { get; set; }
}

使用newtonsoft测试

试图定义你的类为不工作

public class Arg
{
    [JsonProperty("Number")]
    public int Number { get; set; }
}