为什么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
区分大小写?
通过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; }
}