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

时间:2015-05-22 07:28:53

标签: c# asp.net json asp.net-mvc json.net

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

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

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

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

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

Request.Content.ReadAsAsync<Arg>();

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

2 个答案:

答案 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; }
}