当值的格式不正确时,Json.Net返回两个错误

当值的格式不正确时,Json.Net返回两个错误,json.net,asp.net-web-api2,asp.net-core-2.0,Json.net,Asp.net Web Api2,Asp.net Core 2.0,我创建了一个非常简单的web api,其模型类如下: public class Person { [JsonRequired] public int? Age { get; set; } } [HttpPost] public void Post([FromBody] Person person) { } 以及控制器消息,如下所示: public class Person { [JsonRequired] public int? Age { get; set;

我创建了一个非常简单的web api,其模型类如下:

public class Person
{
    [JsonRequired]
    public int? Age { get; set; }
}
[HttpPost]
public void Post([FromBody] Person person)
{
}
以及控制器消息,如下所示:

public class Person
{
    [JsonRequired]
    public int? Age { get; set; }
}
[HttpPost]
public void Post([FromBody] Person person)
{
}
当我通过以下json请求调用此函数时:

{
    "age": "a"
}
我得到:

{
    "errors": {
        "": [
            "Required property 'age' not found in JSON. Path '', line 3, position 1."
        ],
        "age": [
            "Could not convert string to integer: a. Path 'age', line 2, position 11."
        ]
    },
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "80000007-0003-ff00-b63f-84710c7967bb"
}
我不明白为什么我在这里得到两个错误值,尤其是其中一个显然是不真实的。。。有什么想法吗?我不想更改为[Required],因为您丢失了解释发生错误的行号的尼斯错误


谢谢

您提供的JSON值无效,属性年龄需要一个数字,JSON对象应该类似于:

{
    "Age": 22
}

对于JSON,属性值可以是字符串(带单引号或双引号)、数字(不带引号)、true或false、null、对象或数组。

您提供的JSON值无效,属性年龄需要一个数字,JSON对象应类似于:

{
    "Age": 22
}

至于JSON,属性值可以是字符串(带单引号或双引号)、数字(不带引号)、true或false、null、对象或数组。

Hi,我知道它无效。我的问题是为什么它返回两个错误?在JSON.Path“”第3行位置1中找不到所需的属性“age”。由于提供了age,因此该属性不正确(尽管它是一个无效的值)。试图重现此问题,我得到的唯一错误与属性类型有关:“JSON值无法转换为System.Nullable`1[System.Int32].Path:$.age |行号:1 | BytePositionLine:14。“嗨,acheddir。这是通过web API实现的吗?嗨,我知道它无效。我的问题是,它为什么会返回两个错误?”在JSON.Path“”,第3行,位置1中找不到必需的属性“age”。“由于提供了age,因此不正确。”(尽管这是一个无效值。试图重现此问题,但我得到的唯一错误与属性类型有关:“JSON值无法转换为System.Nullable`1[System.Int32]。路径:$.age | LineNumber:1 | bytePositionLine:14。”Hi acheddir。这是通过web API实现的吗?发生这种情况的原因是1)服务器收集所有错误,并在反序列化完成后使用Json.NET将其返回给您;2)从概念上讲,这里实际上有两个错误:i.
“a”
无法反序列化为int;ii.从未设置所需的属性
Age
。但是,如果错误消息说
“所需属性‘age’不是从JSON中设置的。
事情可能会更清楚。这是因为1)服务器收集所有错误,并在反序列化完成后使用JSON.NET返回给您;2) 从概念上讲,这里实际上有两个错误:i<代码>“a”无法反序列化为int;二,。从未设置所需的属性
Age
。但是,如果错误消息说
“所需属性‘age’不是从JSON中设置的,则会产生误导。
事情可能会更清楚。