C# - 来自 Microsoft.AspNetCore.Mvc 的 HttpPost 方法使用 "ValueKind = datatype : value" 而不是 "value" 反序列化为对象数据类型

C# - HttpPost method from Microsoft.AspNetCore.Mvc is deserializing to object datatype with "ValueKind = datatype : value" instead of just "value"

在两个不同的项目上有两个 API 端点,它们接收 json 并将其反序列化为相同的实例 class。

Json:

{
    "name": "MyId",
    "objectData": 4141
}

Class:

public class MyObject
{
    public string name { get; set; }
    public object objectData { get; set; }
}

端点(相同)

[HttpPost, Route("v1/testController/TestEndpoint")]
public IActionResult TestEndpoint(MyObject myObject)
{
    try
    {
        //Do stuff
    }
    catch (ApiException e)
    {
        //Handle error
    }
}

然而,当 json 被反序列化时,objectData 在两个项目中持有不同的值:

myObjectProjectA
{
    name: "MyId"
    objectData: 4141
}

myObjectProjectB
{
    name: "MyId"
    objectData: ValueKind = Number : "4141"
}

期望的结果是 myObjectProjectA。有什么想法为什么它们不同,或者有什么资源可以更好地理解反序列化器如何为 HttpPost 方法工作?

在这两个项目中,我们都使用了以下包: Microsoft.AspNetCore (2.2.0) Microsoft.AspNetCore.Mvc.NewtonsoftJson (3.1.15)

谢谢!

从 post 找到关于 JObject 有类似问题的答案。即使安装了 Newtonsoft.Json,端点仍在使用 system.Text.Json,因为需要将 Newtonsoft.Json 添加到 ConfigureServices()

serviceCollection.AddControllers() .AddNewtonsoftJson();

The JSON value could not be converted to Newtonsoft.Json.Linq.JToken. Path: $ | LineNumber: 1 | BytePositionInLine: 8