假设我有从客户端发送的json有效负载,如下所示
{"Number": 2, "number": 4}
在服务器端,我有这个模型类。
public class Arg
{
public int Number { get; set; }
}
有效负载在我的控制器中反序列化,如下所示:
Request.Content.ReadAsAsync<Arg>();
为什么Arg.Number
== 4?如何使ReadAsAsync
区分大小写?
答案 0 :(得分:2)
通过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
,这就是为什么它会覆盖您的值。
对于名称,我只看到一个添加虚拟属性的解决方案来捕获此值:
public class Arg
{
[JsonProperty("Number")]
public int Number { get; set; }
[JsonProperty("number")]
public int SmallNumber { get; set; }
}
答案 1 :(得分:1)
您需要在自定义反序列化程序
中添加新属性public class Arg
{
public int Number { get; set; }
public int number { get; set; }
}
使用newtonsoft
进行测试尝试将您的班级定义为无法工作
public class Arg
{
[JsonProperty("Number")]
public int Number { get; set; }
}